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内置的字符串处理函数详细整理(覆盖日常所用)
Aug 19 Python
python之wxPython应用实例
Sep 28 Python
python3操作mysql数据库的方法
Jun 23 Python
Django实现组合搜索的方法示例
Jan 23 Python
20个常用Python运维库和模块
Feb 12 Python
python对离散变量的one-hot编码方法
Jul 11 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 Python
Python threading的使用方法解析
Aug 28 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
python面向对象版学生信息管理系统
Jun 24 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
APMServ使用说明
2006/10/23 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
使用console进行性能测试
2015/04/27 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
详解python进行mp3格式判断
2016/12/23 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
Python学习小技巧总结
2018/06/10 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
django_orm查询性能优化方法
2018/08/20 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
判断单链表中是否存在环
2012/07/16 面试题
材料成型及控制工程专业求职信
2014/06/19 职场文书
开展创先争优活动总结
2014/08/28 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
模范教师材料大全
2014/12/16 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
同意落户证明
2015/06/19 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书