多线程3
线程任务无法像函数一样用return返回一个值,Queue类是解决这个问题的一种方法。
以下代码用Queue方法返回线程任务的处理结果:
import threading
from queue import Queue
def thread1_job(lis, q):
for i in range(3):
lis[i] = lis[i] * 2
q.put(lis)
def main():
data = [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
thread = []
queue = Queue()
for i in range(3):
t = threading.Thread(target=thread1_job, args=(data[i], queue))
t.start()
thread.append(t)
for i in range(3):
thread[i].join()
for _ in range(3):
print(queue.get())
if __name__ == '__main__':
main()
输出结果:
[2, 4, 6]
[4, 6, 8]
[6, 8, 10]
本文中线程的任务是把3元数组的每个元素乘2。
Queue是队列,先进先出。
在任务中乘2以后,把新的数组放到Queue对象中。
在main函数,可以从Queue对象取出新的数组。