欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2017年11月15日 17:24:22   投稿:mrr  
這篇文章主要介紹了python獲取多線程及子線程的返回值的相關(guān)資料,需要的朋友可以參考下

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

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,不然主線程比子線程跑的快,會拿不到結(jié)果
 print t.get_result()
et = time.time()
print et - st

執(zhí)行結(jié)果

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

元組中的結(jié)果是函數(shù)foo的返回值,至于結(jié)果為什么這么亂,我猜,是因為各子線程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 先進(jìn)先出,F(xiàn)ILO 先進(jìn)后出(類似棧),優(yōu)先級隊列(由單獨的優(yōu)先級參數(shù)決定順序)。使用隊列可以實現(xiàn)簡單 生產(chǎn)者 – 消費者 模型

總結(jié)

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

相關(guān)文章

  • 淺談Python中帶_的變量或函數(shù)命名

    淺談Python中帶_的變量或函數(shù)命名

    這篇文章主要介紹了淺談Python中帶_的變量或函數(shù)命名,簡單介紹了Python編程風(fēng)格的描述文檔,以及帶有下劃線的命名規(guī)則,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12
  • pyqt5-tools安裝失敗的詳細(xì)處理方法

    pyqt5-tools安裝失敗的詳細(xì)處理方法

    最近在工作中遇到一個問題,python?pyqt5在安裝的時候居然提示失敗了,無奈只能找解決的辦法,這篇文章主要給大家介紹了關(guān)于pyqt5-tools安裝失敗的詳細(xì)處理方法,需要的朋友可以參考下
    2022-05-05
  • python讀取文件列表并排序的實現(xiàn)示例

    python讀取文件列表并排序的實現(xiàn)示例

    本文主要介紹了python讀取文件列表并排序的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 深入解析Python中的上下文管理器

    深入解析Python中的上下文管理器

    Python中把進(jìn)入代碼塊前調(diào)用__enter__ 方法并在離開代碼塊后調(diào)用__exit__方法的對象作為上下文管理器,本文中我們就來深入解析Python中的上下文管理器,來看看上下文管理器的作用及用法:
    2016-06-06
  • 一篇文章帶你學(xué)習(xí)Python3的高級特性(1)

    一篇文章帶你學(xué)習(xí)Python3的高級特性(1)

    這篇文章主要為大家詳細(xì)介紹了Python3的高階函數(shù),主要介紹什么是高級特性,高級特性的用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Xadmin+rules實現(xiàn)多選行權(quán)限方式(級聯(lián)效果)

    Xadmin+rules實現(xiàn)多選行權(quán)限方式(級聯(lián)效果)

    這篇文章主要介紹了Xadmin+rules實現(xiàn)多選行權(quán)限方式(級聯(lián)效果),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python 代碼性能優(yōu)化技巧分享

    Python 代碼性能優(yōu)化技巧分享

    選擇了腳本語言就要忍受其速度,這句話在某種程度上說明了 python 作為腳本的一個不足之處,那就是執(zhí)行效率和性能不夠理想,特別是在 performance 較差的機(jī)器上,因此有必要進(jìn)行一定的代碼優(yōu)化來提高程序的執(zhí)行效率
    2012-08-08
  • 一文秒懂python讀寫csv xml json文件各種騷操作

    一文秒懂python讀寫csv xml json文件各種騷操作

    多年來,數(shù)據(jù)存儲的可能格式顯著增加,但是,在日常使用中,還是以 CSV 、 JSON 和 XML 占主導(dǎo)地位。 在本文中,我將與你分享在Python中使用這三種流行數(shù)據(jù)格式及其之間相互轉(zhuǎn)換的最簡單方法,需要的朋友可以參考下
    2019-07-07
  • Python程序打包exe報錯的幾種解決方法

    Python程序打包exe報錯的幾種解決方法

    本文主要介紹了Python程序打包exe報錯的幾種解決方法,文中通過幾種解決方法的介紹非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-08-08
  • python腳本監(jiān)控docker容器

    python腳本監(jiān)控docker容器

    這篇文章主要為大家詳細(xì)介紹了python腳本監(jiān)控docker容器的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論