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生成验证码图片代码分享
Jan 28 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
python实现SOM算法
Feb 23 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
Python numpy实现二维数组和一维数组拼接的方法
Jun 05 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
在Python函数中输入任意数量参数的实例
Jul 16 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
Python 合并拼接字符串的方法
Jul 28 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
PHP多进程简单实例小结
2019/11/09 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
Python定时发送天气预报邮件代码实例
2019/09/09 Python
Python中base64与xml取值结合问题
2019/12/22 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
如何利用python进行时间序列分析
2020/08/04 Python
python中判断文件结束符的具体方法
2020/08/04 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
日语专业个人求职信范文
2014/02/02 职场文书
《问银河》教学反思
2014/02/19 职场文书
工程部经理岗位职责
2015/02/02 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
暑假生活随笔
2015/08/15 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android