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实现bitmap数据结构详解
Feb 17 Python
Python中为feedparser设置超时时间避免堵塞
Sep 28 Python
python http接口自动化脚本详解
Jan 02 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
解决python中的幂函数、指数函数问题
Nov 25 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
Python必备技巧之函数的使用详解
Apr 04 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生成UTF8文件的方法
2010/05/15 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
Prototype Selector对象学习
2009/07/23 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
python flask实现分页效果
2017/06/27 Python
Python callable()函数用法实例分析
2018/03/17 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
大学校务公开实施方案
2014/03/31 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
财务务虚会发言材料
2014/10/20 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
不同意离婚代理词
2015/05/23 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
自荐信大全
2019/03/21 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
如何使用python包中的sched事件调度器
2022/04/30 Python