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中的startswith和endswith函数使用实例
Aug 25 Python
django实现用户登陆功能详解
Dec 11 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
python原类、类的创建过程与方法详解
Jul 19 Python
深入解析神经网络从原理到实现
Jul 26 Python
简单介绍python封装的基本知识
Aug 10 Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
[转帖]PHP世纪万年历
2006/12/06 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
php中执行系统命令的方法
2015/03/21 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
php 的反射详解及示例代码
2016/08/25 PHP
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python使用marshal模块序列化实例
2014/09/25 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
用Python读取几十万行文本数据
2018/12/24 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
商务邀请函范文
2014/01/14 职场文书
幼儿园招生广告
2014/03/19 职场文书
大学生社会实践评语
2014/04/25 职场文书
物流专业求职信
2014/06/30 职场文书
父亲节活动总结
2015/02/12 职场文书
法院答辩状格式
2015/05/22 职场文书
试用期转正工作总结2015
2015/05/28 职场文书
导游带团欢迎词
2015/09/30 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
人力资源部工作计划
2019/05/14 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android