Python中提供了一个线程安全的FIFO模块QUEUE,可以用于生产者与消费者之间的消息传递。
线程的返回值可以存放于Queue中,然后供主线程读取。
import sysimport threadingimport Queueq = Queue.Queue()def worker1(x, y):func_name = sys._getframe().f_code.co_nameprint "%s run ..." % func_nameq.put((x + y, func_name))def worker2(x, y):func_name = sys._getframe().f_code.co_nameprint "%s run ...." % func_nameq.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 '-' * 50t1.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])
程序运行后的结果如下:
--------------------------------------------------worker1 run ...worker2 run ....worker1 's return value is : 15worker2 's return value is : 19
原文地址:[python]如何取得线程的返回值, 感谢原作者分享。 爬上那座山,听最圣洁的经。