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之从if开始语句的征程
Sep 14 Python
python检测远程端口是否打开的方法
Mar 14 Python
pyqt5自定义信号实例解析
Jan 31 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
python根据list重命名文件夹里的所有文件实例
Oct 25 Python
Python中类的创建和实例化操作示例
Feb 27 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
详解python实现交叉验证法与留出法
Jul 11 Python
linux环境下Django的安装配置详解
Jul 22 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
python scipy卷积运算的实现方法
Sep 16 Python
Python 面向对象部分知识点小结
Mar 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
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
js date 格式化
2017/02/15 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
JavaScript实现世界各地时间显示
2020/09/07 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
python实现类的静态变量用法实例
2015/05/08 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
python机器学习之神经网络(二)
2017/12/20 Python
python计算日期之间的放假日期
2018/06/05 Python
Python元组知识点总结
2019/02/18 Python
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
毕业生找工作的自我评价
2013/10/18 职场文书
计算机专业自荐信
2014/05/24 职场文书
安全月宣传标语
2014/10/07 职场文书
购房个人委托书范本
2014/10/11 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript