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之永远强大的函数
Sep 14 Python
分享Python开发中要注意的十个小贴士
Aug 30 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
python异步存储数据详解
Mar 19 Python
django-初始配置(纯手写)详解
Jul 30 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
Python在线和离线安装第三方库的方法
Oct 31 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 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从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
PHP基础知识回顾
2012/08/16 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
大学生如何写自荐信
2014/01/08 职场文书
小学安全教育材料
2014/02/17 职场文书
股权转让协议书
2014/04/12 职场文书
实习公司领导推荐函
2014/05/21 职场文书
小学教师个人总结
2015/02/05 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
MySQL分布式恢复进阶
2022/07/23 MySQL