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中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
Python命令启动Web服务器实例详解
Feb 23 Python
mac系统安装Python3初体验
Jan 02 Python
Python利用openpyxl库遍历Sheet的实例
May 03 Python
Python定义二叉树及4种遍历方法实例详解
Jul 05 Python
python抓取京东小米8手机配置信息
Nov 13 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
Python基础之tkinter图形化界面学习
Apr 29 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读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
JS 使用for循环遍历子节点查找元素
2014/09/06 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
python 常见的反爬虫策略
2020/09/27 Python
python爬取抖音视频的实例分析
2021/01/19 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
学校司机岗位职责
2013/11/14 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers