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 相关文章推荐
Python3 入门教程 简单但比较不错
Nov 29 Python
从零学python系列之数据处理编程实例(一)
May 22 Python
在Python中利用Pandas库处理大数据的简单介绍
Apr 07 Python
Python可变参数函数用法实例
Jul 07 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
python ddt实现数据驱动
Mar 14 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
python Paramiko使用示例
Sep 21 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
python字典进行运算原理及实例分享
Aug 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来处理多个提交任务
2006/10/09 PHP
php循环输出数据库内容的代码
2008/05/24 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
react写一个select组件的实现代码
2019/04/03 Javascript
Python Trie树实现字典排序
2014/03/28 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
结束运行python的方法
2020/06/16 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
班长岗位职责
2013/11/10 职场文书
企业内部培训方案
2014/02/04 职场文书
红头文件任命书范本
2014/06/05 职场文书
总经理检讨书
2014/09/15 职场文书
出售房屋协议书范本
2014/10/06 职场文书
股东授权委托书
2014/10/15 职场文书
教你一步步实现一个简易promise
2021/11/02 Javascript
Python利用capstone实现反汇编
2022/04/06 Python
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis