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 yield 小结和实例
Apr 25 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
Python的time模块中的常用方法整理
Jun 18 Python
Python File readlines() 使用方法
Mar 19 Python
python实现猜数字小游戏
Mar 24 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 Python
pytorch多GPU并行运算的实现
Sep 27 Python
Python HTMLTestRunner库安装过程解析
May 25 Python
Python with语句用法原理详解
Jul 03 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
给numpy.array增加维度的超简单方法
Jun 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
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
JavaScript的public、private和privileged模式
2009/12/28 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
node内置调试方法总结
2018/02/22 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
React优化子组件render的使用
2019/05/12 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
python基于opencv 实现图像时钟
2021/01/04 Python
C语言笔试题回忆
2015/04/02 面试题
植树节活动总结
2014/04/30 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
北京奥运会口号
2014/06/21 职场文书
化学教育专业自荐信
2014/07/04 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
迎新生标语大全
2014/10/06 职场文书
2015年行政部工作总结
2015/04/28 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
python多次执行绘制条形图
2022/04/20 Python
Android Studio 计算器开发
2022/05/20 Java/Android