1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

Python获取线程返回值的三种方式分别是什么?下文给大家解答

如何利用Python获取线程返回值?

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

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