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随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
Django开发的简易留言板案例详解
Dec 04 Python
python实现Dijkstra算法的最短路径问题
Jun 21 Python
什么是Python变量作用域
Jun 03 Python
简单了解Python多态与属性运行原理
Jun 15 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
python实现不同数据库间数据同步功能
Feb 25 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 Python
Python OpenCV超详细讲解基本功能
Apr 02 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
PHP define函数的使用说明
2008/08/27 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
Javascript创建类和对象详解
2017/05/31 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
小程序实现多列选择器
2019/02/15 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
python3爬取各类天气信息
2018/02/24 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
python实现3D地图可视化
2020/03/25 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
什么是类的返射机制
2016/02/06 面试题
Unix如何添加新的用户
2014/08/20 面试题
设计师求职信模板
2014/05/06 职场文书
国际会计专业求职信
2014/08/04 职场文书
创先争优个人总结
2015/03/04 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
2016年寒假家长评语
2015/10/10 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android