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


Posted in Python onAugust 29, 2019

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

  • _thread
  • threading(推荐使用)

使用Thread类创建

import threading
from time import sleep,ctime
def 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 threading
import time

class 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 @ 0
I'm Thread-5 @ 1
I'm Thread-5 @ 2
"""

使用线程池ThreadPoolExecutor创建

from concurrent.futures import ThreadPoolExecutor
import time
import os
def 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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python zip文件 压缩
Dec 24 Python
python网络编程学习笔记(四):域名系统
Jun 09 Python
python判断字符串是否包含子字符串的方法
Mar 24 Python
Python读取网页内容的方法
Jul 30 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
python下载库的步骤方法
Oct 12 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
Django中Q查询及Q()对象 F查询及F()对象用法
Jul 09 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 #Python
python多线程分块读取文件
Aug 29 #Python
用sqlalchemy构建Django连接池的实例
Aug 29 #Python
详解Python 字符串相似性的几种度量方法
Aug 29 #Python
python多线程同步之文件读写控制
Feb 25 #Python
python线程中的同步问题及解决方法
Aug 29 #Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 #Python
You might like
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
python实现删除文件与目录的方法
2014/11/10 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
python 求定积分和不定积分示例
2019/11/20 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
python动态规划算法实例详解
2020/11/22 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
中学教师实习自我鉴定
2013/09/28 职场文书
司马光教学反思
2014/02/01 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
个人租房协议书范本
2014/09/30 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
Redis 异步机制
2022/05/15 Redis
讨论nginx location 顺序问题
2022/05/30 Servers