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实现将不规范的英文名字首字母大写
Nov 15 Python
python rsa 加密解密
Mar 20 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
Python中zip函数如何使用
Jun 04 Python
理解深度学习之深度学习简介
Apr 14 Python
浅谈Python 中的复数问题
May 19 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分页时出现的Fatal error的解决方法
2011/04/18 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
Angular路由简单学习
2016/12/26 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
python pandas模块基础学习详解
2019/07/03 Python
python中的逆序遍历实例
2019/12/25 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
四群教育工作实施方案
2014/03/26 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
禁毒心得体会范文
2016/01/15 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python