python 獲取多線程的返回值


轉載自網絡 https://www.cnblogs.com/hujq1029/p/7219163.html 並發爬蟲時用到

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)
    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)
(2, 4, 6)
(4, 6, 8)
(6, 8, 10)
1.00099992752

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM