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 Django连接MySQL数据库做增删改查
Nov 07 Python
python根据京东商品url获取产品价格
Aug 09 Python
从零开始学Python第八周:详解网络编程基础(socket)
Dec 14 Python
利用Python循环(包括while&for)各种打印九九乘法表的实例
Nov 06 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
python判断所输入的任意一个正整数是否为素数的两种方法
Jun 27 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
python开发入门——列表生成式
Sep 03 Python
python搜索算法原理及实例讲解
Nov 18 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/04/06 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
2016/05/17 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
2015/10/12 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
vue.config.js中配置Vue的路径别名的方法
2020/02/11 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
python3解析库lxml的安装与基本使用
2018/06/27 Python
Python输出指定字符串的方法
2020/02/06 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
酒店管理自荐信
2013/10/23 职场文书
公务员综合考察材料
2014/02/01 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
为自己工作观后感
2015/06/11 职场文书
公司财务管理制度
2015/08/04 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
浅谈JS的原型和原型链
2021/06/04 Javascript
Element实现动态表格的示例代码
2021/08/02 Javascript