queue可以传递多线程的结果,用以代替return。
下例中,输入4组数据,开启4个线程分别对数据进行计算,然后将结果放入queue中。线程结束后,在主线程中从queue中获取计算结果。
import threading
import time;
from queue import Queue
def job(vec,res):
for i in range(len(vec)):
vec[i] = vec[i]*2
res.put(vec)
def main():
res = Queue()
data=[[1,2,3],[3,4,5],[2,2,2],[3,3,3]]
for i in range(len(data)):
t=threading.Thread(target=job,args=(data[i],res))
t.start()
t.join()
result =[]
for j in range(len(data)):
result.append(res.get())
print(result)
if __name__ == '__main__':
main()
输出结果
[[2, 4, 6], [6, 8, 10], [4, 4, 4], [6, 6, 6]]