方式一:使用Thread.join()方法等待线程结束并获取返回值(测试失败)
Thread.join()方法可以阻塞主线程,等待子线程结束后才会继续执行。使用此方法可以等待子线程返回值,代码示例如下:
import threading
def task():
return "Hello, World!"
t = threading.Thread(target=task)
t.start()
t.join()
result = t.result
print(result)
在上面的代码中,我们创建了一个线程t,执行方法task,并等待线程t结束。等待结束后,我们可以从线程t中获取任务返回的结果,并打印输出结果。
方式二:使用queue.Queue获取线程返回值
queue模块提供了线程间通信的队列。使用队列能够解决线程安全问题,这也是一种获取线程返回值的有效方法。
import threading
import queue
def task(q):
result = "Hello, World!"
q.put(result)
q = queue.Queue()
t = threading.Thread(target=task, args=(q,))
t.start()
result = q.get()
print(result)
在上面的代码中,我们创建了一个队列,用于线程间通信。方法task的返回值通过队列进行添加。等待线程结束后,我们从队列中取出该返回值,最后输出结果。
这种方法可以获取数据,result中包括多个对象时就有问题了,多个对象可以做成元组