国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python獲取多線程及子線程的返回值

2020-02-16 10:44:07
字體:
來源:轉載
供稿:網友

最近有個需求,用多線程比較合適,但是我需要每個線程的返回值,這就需要我在threading.Thread的基礎上進行封裝

import threadingclass 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 Nonedef foo(a,b,c): time.sleep(1) print a*2,b*2,c*2, return a*2,b*2,c*2st = 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

執(zhí)行結果

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

元組中的結果是函數(shù)foo的返回值,至于結果為什么這么亂,我猜,是因為各子線程foo的print和主線程print get_result()一起搶占系統(tǒng)資源造成。

下面介紹下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]) 

這是目前最主流的獲取線程數(shù)據(jù)的方法。使用 Queue 庫創(chuàng)建隊列實例,用來儲存和傳遞線程間的數(shù)據(jù)。Python 的隊列是線程安全的,也就是說多個線程同時訪問一個隊列也不會有沖突。Python 隊列有三種 FIFO 先進先出,F(xiàn)ILO 先進后出(類似棧),優(yōu)先級隊列(由單獨的優(yōu)先級參數(shù)決定順序)。使用隊列可以實現(xiàn)簡單 生產者 – 消費者 模型

總結

以上所述是小編給大家介紹的python獲取多線程及子線程的返回值,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林站長站網站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 专栏| 成都市| 石柱| 资中县| 于田县| 师宗县| 丹阳市| 玉田县| 闽侯县| 田林县| 股票| 苏尼特右旗| 库伦旗| 洪泽县| 昌平区| 二手房| 梁山县| 永年县| 寿宁县| 灵武市| 乌鲁木齐县| 丰台区| 思茅市| 苏尼特右旗| 远安县| 元谋县| 乐东| 扶绥县| 达州市| 忻州市| 宿州市| 亳州市| 定襄县| 于都县| 天祝| 霞浦县| 平乐县| 公安县| 隆昌县| 舞阳县| 江华|