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

首頁 > 編程 > Python > 正文

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

2020-01-04 16:22:14
字體:
來源:轉載
供稿:網友

最近有個需求,用多線程比較合適,但是我需要每個線程的返回值,這就需要我在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

執行結果

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獲取多線程及子線程的返回值,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 皋兰县| 海林市| 当涂县| 秀山| 铁力市| 慈溪市| 镇巴县| 威远县| 竹北市| 登封市| 泽库县| 辛集市| 新民市| 苗栗市| 青川县| 泸州市| 蓬溪县| 兴安盟| 星座| 湘潭市| 沧源| 额济纳旗| 库车县| 手游| 东莞市| 葫芦岛市| 乌什县| 北辰区| 铁力市| 安顺市| 和硕县| 蓝田县| 舟山市| 武宁县| 商丘市| 上林县| 丹凤县| 历史| 历史| 陕西省| 石林|