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中请使用isinstance()判断变量类型
Aug 25 Python
Python实现telnet服务器的方法
Jul 10 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
浅谈Python实现Apriori算法介绍
Dec 20 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
Keras-多输入多输出实例(多任务)
Jun 22 Python
Python字符串三种格式化输出
Sep 17 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
php简单统计中文个数的方法
2016/09/30 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
JavaScript如何禁止Backspace键
2015/12/02 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
js实现登录与注册界面
2017/11/01 Javascript
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
python email smtplib模块发送邮件代码实例
2018/04/26 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
大学毕业感言一句话
2014/02/06 职场文书
创先争优活动心得体会
2014/09/04 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
Mysql基础知识点汇总
2021/05/26 MySQL
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL