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中stdout输出不缓存的设置方法
May 29 Python
使用Python编写提取日志中的中文的脚本的方法
Apr 30 Python
Python实现简单HTML表格解析的方法
Jun 15 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
Django中的session用法详解
Mar 09 Python
PyTorch中的C++扩展实现
Apr 02 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 Python
Python中使用subprocess库创建附加进程
May 11 Python
详解Python牛顿插值法
May 11 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
DedeCms模板安装/制作概述
2007/03/11 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
php阳历转农历优化版
2016/08/08 PHP
实例解析php的数据类型
2018/10/24 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
js实现表格字段排序
2014/02/19 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
python脚本实现查找webshell的方法
2014/07/31 Python
Python类装饰器实现方法详解
2018/12/21 Python
Python何时应该使用Lambda函数
2019/07/02 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
企业消防安全责任书
2014/07/23 职场文书
2014年公司工作总结
2014/11/22 职场文书
宪法宣传标语100条
2019/10/15 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS