python实现多线程的两种方式


Posted in Python onMay 22, 2016

目前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()

 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()

以上就是本文的全部内容吗,希望对大家学习python程序设计有所帮助。

Python 相关文章推荐
Python和Perl绘制中国北京跑步地图的方法
Mar 03 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
Python网络编程详解
Oct 31 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
Python 使用list和tuple+条件判断详解
Jul 30 Python
Python实现AI换脸功能
Apr 10 Python
一篇文章教你用python画动态爱心表白
Nov 22 Python
Elasticsearch 基本查询和组合查询
Apr 19 Python
python实现简单购物商城
May 21 #Python
python字符串的常用操作方法小结
May 21 #Python
python实现用户登录系统
May 21 #Python
python列表的常用操作方法小结
May 21 #Python
bat和python批量重命名文件的实现代码
May 19 #Python
批处理与python代码混合编程的方法
May 19 #Python
python实现汉诺塔递归算法经典案例
Mar 01 #Python
You might like
使用php4加速网络传输
2006/10/09 PHP
PHP实现采集程序原理和简单示例代码
2007/03/18 PHP
linux下 C语言对 php 扩展
2008/12/14 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
js自带函数备忘 数组
2006/12/29 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
javascript时间函数大全
2014/06/30 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
python构建深度神经网络(DNN)
2018/03/10 Python
python如何为创建大量实例节省内存
2018/03/20 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
python hough变换检测直线的实现方法
2019/07/12 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
大学生求职信范文应怎么写
2014/01/01 职场文书
会议主持词通用版
2019/04/02 职场文书
golang slice元素去重操作
2021/04/30 Golang
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python