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 输入一个数n,求n个数求乘或求和的实例
Nov 13 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
python经典趣味24点游戏程序设计
Jul 26 Python
python读取Excel表格文件的方法
Sep 02 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
Python关键字及可变参数*args,**kw原理解析
Apr 04 Python
Python如何读写二进制数组数据
Aug 01 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 Python
使用tensorflow 实现反向传播求导
May 26 Python
Python基础知识学习之类的继承
May 31 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
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
dwr spring的集成实现代码
2009/03/22 Javascript
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
Python函数中的函数(闭包)用法实例
2016/03/15 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
快速查找Python安装路径方法
2020/02/06 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
过滤器的用法
2013/10/08 面试题
会议邀请函
2015/01/30 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript