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实现查找系统盘中需要找的字符
Jul 14 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
Python中的浮点数原理与运算分析
Oct 12 Python
使用tensorflow实现AlexNet
Nov 20 Python
详解Django 中是否使用时区的区别
Jun 14 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
通过python调用adb命令对App进行性能测试方式
Apr 23 Python
Python如何定义有可选参数的元类
Jul 31 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 获取全局变量的代码
2011/04/21 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
javascript+xml技术实现分页浏览
2008/07/27 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
python字典DICT类型合并详解
2017/08/17 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
详解Python核心对象类型字符串
2018/02/11 Python
Python实现Kmeans聚类算法
2020/06/10 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
python 实现两个npy档案合并
2020/07/01 Python
python爬虫 requests-html的使用
2020/11/30 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
什么是TCP/IP
2014/07/27 面试题
求职简历自荐信
2013/10/20 职场文书
大学生军训广播稿
2014/01/24 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
工作试用期自我评价
2015/03/10 职场文书
导游词之桂林山水
2019/09/20 职场文书
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL