Python实现多线程的两种方式分析


Posted in Python onAugust 29, 2018

本文实例讲述了Python实现多线程的两种方式。分享给大家供大家参考,具体如下:

目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用。

2.7版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了multithreading  模块。threading模块里面主要是对一些线程的操作对象化,创建Thread的class。一般来说,使用线程有两种模式:

  • A 创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;
  • B 继承Thread类,创建一个新的class,将要执行的代码 写到run函数里面。

本文介绍两种实现方法。

第一种 创建函数并且传入Thread 对象中

t.py 脚本内容

import threading,time
from time import sleep, ctime
def now() :
 return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )
def test(nloop, nsec):
 print 'start loop', nloop, 'at:', now()
 sleep(nsec)
 print 'loop', nloop, 'done at:', now()
def main():
 print 'starting at:',now()
 threadpool=[]
 for i in xrange(10):
  th = threading.Thread(target= test,args= (i,2))
  threadpool.append(th)
 for th in threadpool:
  th.start()
 for th in threadpool :
  threading.Thread.join( th )
 print 'all Done at:', now()
if __name__ == '__main__':
  main()

执行结果:

starting at: 2018-08-29 09:34:16
start loop 0 at: 2018-08-29 09:34:16
start loop 1 at: 2018-08-29 09:34:16
start loop 2 at: 2018-08-29 09:34:16start loop 3 at: 2018-08-29 09:34:16

start loop 4 start loopat:  52018-08-29 09:34:16
at: 2018-08-29 09:34:16
start loop 6 at: start loop2018-08-29 09:34:16
7 at: 2018-08-29 09:34:16
start loop 8 start loopat: 9  2018-08-29 09:34:16at:
 2018-08-29 09:34:16
looploop 1 done at: 2018-08-29 09:34:18
 0 done at: 2018-08-29 09:34:18
loop 3 done at: 2018-08-29 09:34:18
looploop 5 done at: 2018-08-29 09:34:18
 2 done at: 2018-08-29 09:34:18
loop 4 done at: 2018-08-29 09:34:18
looploop 7 done at: 2018-08-29 09:34:18
 6 done at: 2018-08-29 09:34:18
looploop  98  done at:done at:  2018-08-29 09:34:182018-08-29 09:34:18

all Done at: 2018-08-29 09:34:18

第二种 创建继承自Thread的类

thclass.py 脚本内容:

import threading , time
from time import sleep, ctime
def now() :
 return str(time.strftime('%Y-%m-%d %H:%M:%S' , time.localtime()))
class myThread (threading.Thread) :
 """docstring for myThread"""
 def __init__(self, nloop, nsec) :
  super(myThread, self).__init__()
  self.nloop = nloop
  self.nsec = nsec
 def run(self):
  print 'start loop', self.nloop, 'at:', ctime()
  sleep(self.nsec)
  print 'loop', self.nloop, 'done at:', ctime()
def main():
 thpool = []
 print 'starting at:', now()
 for i in xrange(10):
  thpool.append(myThread(i, 2))
 for th in thpool:
  th.start()
 for th in thpool:
  th.join()
 print 'all Done at:', now()
if __name__ == '__main__':
  main()

执行结果:

starting at: 2018-08-29 09:36:02
start loop 0 at: Wed Aug 29 09:36:02 2018
start loop 1 at: Wed Aug 29 09:36:02 2018
start loop 2 at: Wed Aug 29 09:36:02 2018
start loop 3 at: Wed Aug 29 09:36:02 2018
start loop 4 at: Wed Aug 29 09:36:02 2018
 start loop 5 at: Wed Aug 29 09:36:02 2018
start loop 6 at: Wed Aug 29 09:36:02 2018
start loop 7 at: Wed Aug 29 09:36:02 2018
start loop 8 at: Wed Aug 29 09:36:02 2018
start loop 9 at: Wed Aug 29 09:36:02 2018
loop 0 done at: Wed Aug 29 09:36:04 2018
loop 1 done at: Wed Aug 29 09:36:04 2018
looploop  23  done at:done at:  Wed Aug 29 09:36:04 2018Wed Aug 29 09:36:04 2018

loop 4 done at: Wed Aug 29 09:36:04 2018
loop 5 done at: Wed Aug 29 09:36:04 2018
loop 6 done at: Wed Aug 29 09:36:04 2018
looploop loop 8 9 7 done at: done at: done at: Wed Aug 29 09:36:04 2018 Wed Aug 29 09:36:04 2018
Wed Aug 29 09:36:04 2018

all Done at: 2018-08-29 09:36:04

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
python中的闭包函数
Feb 09 Python
Python中pillow知识点学习
Apr 30 Python
Python读写及备份oracle数据库操作示例
May 17 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python实现的汉诺塔算法示例
Oct 23 Python
python图形开发GUI库pyqt5的基本使用方法详解
Feb 14 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 #Python
python单例模式实例解析
Aug 28 #Python
Python3.7实现中控考勤机自动连接
Aug 28 #Python
python实现遍历文件夹修改文件后缀
Aug 28 #Python
Python绘制正余弦函数图像的方法
Aug 28 #Python
Python logging模块用法示例
Aug 28 #Python
Python异常处理操作实例详解
Aug 28 #Python
You might like
两款万能的php分页类
2015/11/12 PHP
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
python+pyqt实现12306图片验证效果
2017/10/25 Python
Python IDLE入门简介
2017/12/08 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
python3.6数独问题的解决
2019/01/21 Python
数字天堂软件测试面试题
2012/12/23 面试题
2014年六一儿童节演讲稿
2014/05/23 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
体操比赛口号
2014/06/10 职场文书
机械机修工岗位职责
2014/08/03 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
建筑横幅标语
2014/10/09 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
大学毕业生自我评价
2015/03/02 职场文书
2015年酒店工作总结
2015/04/28 职场文书
股权投资协议书
2016/03/23 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python