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用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
python出现"IndentationError: unexpected indent"错误解决办法
Oct 15 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
kafka-python批量发送数据的实例
Dec 27 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
Python 通过打码平台实现验证码的实现
May 13 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
Python 如何提高元组的可读性
Aug 26 Python
pytorch: Parameter 的数据结构实例
Dec 31 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
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
多人战的战术与战略
2020/03/04 星际争霸
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
介绍一下write命令
2012/09/24 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
自主招生自荐书
2013/11/29 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
体育馆的标语
2014/06/24 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
文书工作总结(范文)
2019/07/11 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
浅谈Web Storage API的使用
2021/06/23 Javascript
MySQL多表查询机制
2022/03/17 MySQL
MySQL RC事务隔离的实现
2022/03/31 MySQL
Go语言安装并操作redis的go-redis库
2022/04/14 Golang