下面就来详细讲解“python多线程中获取函数返回值的三种方法”。
前言
在使用Python多线程处理任务时,我们常常会遇到需要等待线程执行完毕并获取执行结果的情况。但是由于线程之间的并发执行,导致我们在获取结果时无法像单线程一样直接在函数末尾获得返回值。
本文将为大家介绍Python多线程中获取函数返回值的三种方法,分别是:
- 使用全局变量
- 使用Queue队列
- 使用Futures模块
方法一:使用全局变量
采用全局变量的方法,实质是在主线程和工作线程之间共享数据。在主线程中定义一个变量,在工作线程中将结果赋值给这个变量即可。
下面是一份示例代码:
import threading
result = None
def job():
global result
result = "Hello, World!"
t = threading.Thread(target=job)
t.start()
t.join()
print(result)
运行这份代码,我们会发现在打印输出时,结果为:
Hello, World!
这与我们在工作线程中定义的返回值相一致。因此我们可以证明使用全局变量是一种获取函数返回值的方法。
方法二:使用Queue队列
我们在Python脚本中查看常见的数据结构后,便会发现Queue,它是Python中线程安全的队列,一般用于线程之间的数据传输。
在使用Queue队列时,我们可以将含有结果的数据添加进队列中,最后在主线程中获得队列的全部数据即可。
下面是一份示例代码:
import threading, queue
result_queue = queue.Queue()
def job():
result_queue.put("Hello, World!")
t = threading.Thread(target=job)
t.start()
t.join()
while not result_queue.empty():
print(result_queue.get())
运行这份代码,我们会发现在打印输出时,结果为:
Hello, World!
这与我们在工作线程中定义的返回值相一致。因此我们可以证明使用Queue队列是一种获取函数返回值的方法。
方法三:使用Futures模块
Futures模块是Python自带的,用于异步调用函数的模块。通过使用Futures模块中的Future
类,我们可以实现在主线程中等待工作线程执行完毕后获取返回值。
下面是一份示例代码:
import concurrent.futures
def job():
return "Hello, World!"
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(job)
print(future.result())
运行这份代码,我们会发现在打印输出时,结果为:
Hello, World!
这与我们在工作线程中定义的返回值相一致。因此我们可以证明使用Futures模块是一种获取函数返回值的方法。
总结
本文为大家详细讲解了Python多线程中获取函数返回值的三种方法,分别是使用全局变量、使用Queue队列、和使用Futures模块。希望本文能够对大家在Python多线程处理任务时获取返回值有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python多线程中获取函数返回值的三种方法 - Python技术站