python获取多线程及子线程的返回值


Posted in Python onNovember 15, 2017

最近有个需求,用多线程比较合适,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装

import threading
class MyThread(threading.Thread):
 def __init__(self,func,args=()):
  super(MyThread,self).__init__()
  self.func = func
  self.args = args
 def run(self):
  self.result = self.func(*self.args)
 def get_result(self):
  try:
   return self.result # 如果子线程不使用join方法,此处可能会报没有self.result的错误
  except Exception:
   return None
def foo(a,b,c):
 time.sleep(1)
 print a*2,b*2,c*2,
 return a*2,b*2,c*2
st = time.time()
li = []
for i in xrange(4):
 t = MyThread(foo,args=(i,i+1,i+2))
 li.append(t)
 t.start()
for t in li:
 t.join() # 一定要join,不然主线程比子线程跑的快,会拿不到结果
 print t.get_result()
et = time.time()
print et - st

执行结果

0 2 4 (0, 2, 4)
4 6 8 2 4 6 (2, 4, 6)
(4, 6, 8)
6 8 10 (6, 8, 10)
1.00200009346

元组中的结果是函数foo的返回值,至于结果为什么这么乱,我猜,是因为各子线程foo的print和主线程print get_result()一起抢占系统资源造成。

下面介绍下python获得子线程的返回值,具体代码如下所示:

import sys 
import threading 
import Queue 
q = Queue.Queue() 
def worker1(x, y): 
 func_name = sys._getframe().f_code.co_name 
 print "%s run ..." % func_name 
 q.put((x + y, func_name)) 
def worker2(x, y): 
 func_name = sys._getframe().f_code.co_name 
 print "%s run ...." % func_name 
 q.put((x - y, func_name)) 
if __name__ == '__main__': 
 result = list() 
 t1 = threading.Thread(target=worker1, name='thread1', args=(10, 5, )) 
 t2 = threading.Thread(target=worker2, name='thread2', args=(20, 1, )) 
 print '-' * 50 
 t1.start() 
 t2.start() 
 t1.join() 
 t2.join() 
 while not q.empty(): 
  result.append(q.get()) 
 for item in result: 
  if item[1] == worker1.__name__: 
   print "%s 's return value is : %s" % (item[1], item[0]) 
  elif item[1] == worker2.__name__: 
   print "%s 's return value is : %s" % (item[1], item[0])

这是目前最主流的获取线程数据的方法。使用 Queue 库创建队列实例,用来储存和传递线程间的数据。Python 的队列是线程安全的,也就是说多个线程同时访问一个队列也不会有冲突。Python 队列有三种 FIFO 先进先出,FILO 先进后出(类似栈),优先级队列(由单独的优先级参数决定顺序)。使用队列可以实现简单 生产者 ? 消费者 模型

总结

以上所述是小编给大家介绍的python获取多线程及子线程的返回值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python实现115网盘自动下载的方法
Sep 30 Python
python 异常处理总结
Oct 18 Python
Python内置函数OCT详解
Nov 09 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
python实现朴素贝叶斯算法
Nov 19 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
Python动态声明变量赋值代码实例
Dec 30 Python
python excel多行合并的方法
Dec 09 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 #Python
python enumerate函数的使用方法总结
Nov 15 #Python
Python set常用操作函数集锦
Nov 15 #Python
python机器学习库常用汇总
Nov 15 #Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 #Python
给你选择Python语言实现机器学习算法的三大理由
Nov 15 #Python
Python数据结构之顺序表的实现代码示例
Nov 15 #Python
You might like
php中定义网站根目录的常用方法
2010/08/08 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
php微信支付接口开发程序
2016/08/02 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
看了就知道什么是JSON
2007/12/09 Javascript
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python实现给字典添加条目的方法
2014/09/25 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
python自定义异常实例详解
2017/07/11 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
小学教师的自我评价范例
2013/10/31 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
档案工作汇报材料
2014/08/21 职场文书
民主评议党员工作总结
2014/10/20 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书