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发送伪造的arp请求
Jan 09 Python
Python pass 语句使用示例
Mar 11 Python
Django卸载之后重新安装的方法
Mar 15 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
Python模块、包(Package)概念与用法分析
May 31 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
python 基于DDT实现数据驱动测试
Feb 18 Python
Python pyecharts绘制条形图详解
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
PHP 日,周,月点击排行统计
2012/01/11 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
js实现一个简易计算器
2020/03/30 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
el-table表头根据内容自适应完美解决表头错位和固定列错位
2021/01/07 Javascript
Python随机生成手机号、数字的方法详解
2017/07/21 Python
python 调用c语言函数的方法
2017/09/29 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
python模块如何查看
2020/06/16 Python
实习自我鉴定范文
2013/10/30 职场文书
信息系统专业个人求职信范文
2013/12/07 职场文书
21岁生日感言
2014/02/27 职场文书
有创意的广告词
2014/03/18 职场文书
服装设计专业求职信
2014/06/16 职场文书
庆祝教师节标语
2014/10/09 职场文书
简历自荐信范文
2015/03/09 职场文书
「月刊Action」2022年5月号封面公开
2022/03/21 日漫
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python