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任务调度实例分析
May 19 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
python切片及sys.argv[]用法详解
May 25 Python
pandas值替换方法
Jul 10 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
django自定义模板标签过程解析
Dec 14 Python
Python爬虫基础讲解之请求
May 13 Python
Python中zipfile压缩包模块的使用
May 14 Python
Python实战之实现简易的学生选课系统
May 25 Python
python实现MD5进行文件去重的示例代码
Jul 09 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
杏林同学录(八)
2006/10/09 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
python如何实现word批量转HTML
2020/09/30 Python
机械专业毕业生自荐信
2013/11/02 职场文书
学习心得体会
2014/01/01 职场文书
园艺师求职信
2014/03/10 职场文书
高三学生评语大全
2014/04/25 职场文书
市场营销调查计划书
2014/05/02 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
给领导的感谢信范文
2015/01/23 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers