如何利用Python获取线程返回值?
作为本际云服务器推荐网的小编小本本,我会在这篇文章中给大家解答如何获取线程返回值的问题。同时,我会详细介绍三种不同的方法,帮助大家更好地掌握这个知识点。

三种获取线程返回值的方法
下面我们将介绍三种获取线程返回值的方法。
方法一:使用全局变量的列表,来保存返回值
我们可以使用全局变量的列表来保存线程的返回值,具体操作为:
ret_values=[]
def thread_func(*args):
…
value=…
ret_values.append(value)
我们之所以选择使用列表来保存返回值,是因为Python中,在使用append()方法时,它是线程安全的。如果使用自定义的数据结构,在并发修改数据的时候需要加线程锁。如果有事先知道有多少个线程的情况,可以定义一个固定长度的列表,然后根据索引来存放返回值。
方法二:重写Thread类的join方法,返回线程函数的返回值
默认的thread.join()方法只是等待线程函数结束,没有返回值,我们可以重写此方法,返回函数的运行结果,代码如下:
from threading import Thread
def foo(arg):
return arg
class ThreadWithReturnValue(Thread):
def run(self):
if self._target is not None:
self._return=self._target(*self._args,**self._kwargs)
def join(self):
super().join()
return self._return
twrv=ThreadWithReturnValue(target=foo,args=(“hello world”,))
twrv.start()
print(twrv.join())
方法三:使用标准库concurrent.futures
Python的标准库concurrent.futures提供更高级的线程操作,可以直接获取线程的返回值,代码如下:
import concurrent.futures
def foo(bar):
return bar
with concurrent.futures.ThreadPoolExecutor(max_workers=10)as executor:
to_do=[]
for i in range(10):
future=executor.submit(foo,f”hello world!{i}”)
to_do.append(future)
for future in concurrent.futures.as_completed(to_do):
print(future.result())
结语
我们在本文中详细介绍了三种不同的方法来获取线程的返回值。如果您常常需要使用线程编程,那么我们强烈推荐您使用第三种方法,它相对更为优雅且易于理解。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7208.html
