首页 > 编程 > Python > 正文

python线程的几种创建方式详解

2019-11-25 11:49:31
字体:
来源:转载
供稿:网友

Python3 线程中常用的两个模块为:

  • _thread
  • threading(推荐使用)

使用Thread类创建

import threadingfrom time import sleep,ctimedef sing():  for i in range(3):    print("正在唱歌...%d"%i)    sleep(1)def dance():  for i in range(3):    print("正在跳舞...%d"%i)    sleep(1)if __name__ == '__main__':  print('---开始---:%s'%ctime())  t1 = threading.Thread(target=sing)  t2 = threading.Thread(target=dance)  t1.start()  t2.start()  #sleep(5) # 屏蔽此行代码,试试看,程序是否会立马结束?  print('---结束---:%s'%ctime())"""输出结果:---开始---:Sat Aug 24 08:44:21 2019正在唱歌...0正在跳舞...0---结束---:Sat Aug 24 08:44:21 2019正在唱歌...1正在跳舞...1正在唱歌...2正在跳舞...2"""

说明:主线程会等待所有的子线程结束后才结束

使用Thread子类创建

为了让每个线程的封装性更完美,所以使用threading模块时,往往会定义一个新的子类class,只要继承threading.Thread就可以了,然后重写run方法。

import threadingimport timeclass MyThread(threading.Thread):  def run(self):    for i in range(3):      time.sleep(1)      msg = "I'm "+self.name+' @ '+str(i) #name属性中保存的是当前线程的名字      print(msg)if __name__ == '__main__':  t = MyThread()  t.start()"""输出结果:I'm Thread-5 @ 0I'm Thread-5 @ 1I'm Thread-5 @ 2"""

使用线程池ThreadPoolExecutor创建

from concurrent.futures import ThreadPoolExecutorimport timeimport osdef sayhello(a):  for i in range(10):    time.sleep(1)    print("hello: " + a)def main():  seed = ["a", "b", "c"]  # 最大线程数为3,使用with可以自动关闭线程池,简化操作  with ThreadPoolExecutor(3) as executor:    for each in seed:       # map可以保证输出的顺序, submit输出的顺序是乱的      executor.submit(sayhello, each)  print("主线程结束")if __name__ == '__main__':  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表