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函数同时遍历多个迭代器示例详解
Nov 14 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
python 堆和优先队列的使用详解
Mar 05 Python
python用match()函数爬数据方法详解
Jul 23 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 Python
Python实现数字的格式化输出
Aug 01 Python
如何利用python正则表达式匹配版本信息
Dec 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
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
管理部部长岗位职责
2013/12/05 职场文书
采购意向书范本
2014/03/31 职场文书
建筑工地宣传标语
2014/06/18 职场文书
建筑学专业自荐书
2014/07/09 职场文书
乌镇导游词
2015/02/02 职场文书
工资证明格式模板
2015/06/12 职场文书
单位工作证明范本
2015/06/15 职场文书
怎样写好工作计划
2019/04/10 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL