亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 2044 0

最近有個需求,用多線程比較合適,但是我需要每個線程的返回值,這就需要我在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 先進后出(類似棧),優先級隊列(由單獨的優先級參數決定順序)。使用隊列可以實現簡單 生產者 ?C 消費者 模型

總結

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久草视频免费在线播放 | 伊人网在线视频 | 香香影院在线观看 | 午夜精品久久久久久久99热 | 久草视频在线免费看 | 曰批免费视频播放在线看片二 | 日本二级毛片免费 | 成人在线精品视频 | 国产免费私人影院永久免费 | 久久大香香蕉国产免费网站 | 97在线观看免费视频 | 亚洲天码中文字幕第一页 | 亚洲国产成人资源在线桃色 | 中文字幕色婷婷在线视频 | 在线观看理论片 | 天堂成人一区二区三区 | 亚洲高清专区 | 777奇米影视视频在线播放 | 久久伊人在 | 欧美一级在线毛片免费观看 | 久久99久久精品国产只有 | 日本中文字幕在线观看 | 国产四虎 | 国产在线精品二区赵丽颖 | 9久久免费国产精品特黄 | 成年女人18级毛片毛片 | 久久图库99图库 | 9999久久 | 久久天天躁狠狠躁夜夜2020一 | 一区一精品| 久久国产亚洲 | 色综合久久中文色婷婷 | 老司机永久免费网站在线观看 | 97在线观看成人免费视频 | 色综合视频在线观看 | 狠狠操夜夜爱 | 久久久噜噜噜久久老司机 | 久久天天操| 亚洲天堂久久久 | 美国黑人特大一级毛片 | 欧美一级人与动毛片免费播放 |