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爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
pycharm 配置远程解释器的方法
Oct 28 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
python实现动态创建类的方法分析
Jun 25 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
python实现的分层随机抽样案例
Feb 25 Python
Matplotlib配色之Colormap详解
Jan 05 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
Python中threading库实现线程锁与释放锁
May 17 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 Python
Python中文分词库jieba(结巴分词)详细使用介绍
Apr 07 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 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代码包装修正版
2008/03/15 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
2011/07/03 PHP
php中{}大括号是什么意思
2013/12/01 PHP
MSN消息提示类
2006/09/05 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
50行Python代码实现人脸检测功能
2018/01/23 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
Python3 log10()函数简单用法
2019/02/19 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
药学专业大学生个人的自我评价
2013/11/04 职场文书
关于人生的感言
2014/01/17 职场文书
庆八一活动方案
2014/01/25 职场文书
校庆口号
2014/06/20 职场文书
护士求职信
2014/07/05 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang