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链接Oracle数据库的方法
Jun 28 Python
详解Python的Lambda函数与排序
Oct 25 Python
python使用xslt提取网页数据的方法
Feb 23 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
Python包和模块的分发详细介绍
Jun 19 Python
基于python实现操作redis及消息队列
Aug 27 Python
python Tornado框架的使用示例
Oct 19 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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
关于vue面试题汇总
2018/03/20 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
python 基础教程之Map使用方法
2017/01/17 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python requests 测试代理ip是否生效
2018/07/25 Python
python实现画循环圆
2019/11/23 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
GWT都有什么特性
2016/12/02 面试题
毕业生求职推荐信
2013/11/04 职场文书
商务经理岗位职责
2014/07/30 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
暖春观后感
2015/06/08 职场文书
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技
Java实现带图形界面的聊天程序
2022/06/10 Java/Android