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 相关文章推荐
python3实现随机数
Jun 25 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
Python动态导入模块和反射机制详解
Feb 18 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
Python读取xlsx数据生成图标代码实例
Aug 12 Python
python 模拟登陆163邮箱
Dec 15 Python
用Python实现Newton插值法
Apr 17 Python
图神经网络GNN算法
May 11 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/27 PHP
php 判断数组是几维数组
2013/03/20 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
Python中List.index()方法的使用教程
2015/05/20 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
Django 路由系统URLconf的使用
2018/10/11 Python
Python制作exe文件简单流程
2019/01/24 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
在python中修改.properties文件的操作
2020/04/08 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
十佳大学生村官事迹
2014/01/09 职场文书
国培教师自我鉴定
2014/02/12 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
委托书的写法
2014/08/30 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
慰问信格式规范
2015/03/23 职场文书