python通過多線程並獲取返回值


以下是多線程獲取返回值的一種實現方式

# -*-coding:utf-8-*-
from time import ctime, sleep
import threading
import numpy as np
import collections
 
loops = ['廣州', '北京']
t_list = ['01', '02', '03']
cldas_sum = collections.deque()
 
 
class MyThread(threading.Thread):
    def __init__(self, func, args, name=''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args
        self.result = self.func(*self.args)
 
    def get_result(self):
        try:
            return self.result
        except Exception:
            return None
 
 
def loop(nloop):
    for j in t_list:
        cldas_values = []
        for k in range(4):
            cldas_value = nloop + str(k)
            cldas_values.append(cldas_value)
        cldas_values.append(j)
        cldas_values.append(nloop)
        cldas_sum.append(cldas_values)
        print(id(cldas_values))
    #print(cldas_sum)
    return cldas_sum
 
 
def main():
    print('start at', ctime())
    threads = []
    nloops = range(len(loops))
    for i in nloops:
        t = MyThread(loop, (loops[i],), loop.__name__)
        threads.append(t)
    for i in nloops:   # start threads 此處並不會執行線程,而是將任務分發到每個線程,同步線程。等同步完成后再開始執行start方法
        threads[i].start()
    for i in nloops:   # jion()方法等待線程完成
        threads[i].join()
    print(threads[1].get_result())
    print('DONE AT:', ctime())
 
 
if __name__ == '__main__':
    main()

需要注意的是:

如果多個線程共用一個公共數據,那么我們需要做的就是將這個公共數據設置成隊列格式,要不然多個線程共同訪問這個數據可能會出錯,需要加鎖。設置成隊列比加鎖再放鎖效率高多了


免責聲明!

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



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