下面的函数foo返回字符串'foo'.如何获取线程目标返回的值'foo'

from threading import Thread

def foo(bar):
    print('hello {}'.format(bar))
    return 'foo'

thread = Thread(target=foo, args=('world!',))
thread.start()
return_value = thread.join()

上面显示的"一个显而易见的方法"是行不通的:thread.join()返回None.

推荐答案

在Python 3.2+中,stdlib concurrent.futures模块为threading提供了更高级别的API,包括将工作线程的返回值或异常传递回主线程:

import concurrent.futures

def foo(bar):
    print('hello {}'.format(bar))
    return 'foo'

with concurrent.futures.ThreadPoolExecutor() as executor:
    future = executor.submit(foo, 'world!')
    return_value = future.result()
    print(return_value)

Python相关问答推荐

Python中的锁定类和线程以实现dict移动

单击Python中的复选框后抓取数据

如何在vercel中指定Python运行时版本?

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

如何终止带有队列的Python进程?+ 队列大小的错误?

如何使用上下文管理器创建类的实例?

优化在numpy数组中非零值周围创建缓冲区的函数的性能

如何记录脚本输出

如何让这个星型模式在Python中只使用一个for循环?

从spaCy的句子中提取日期

pandas:排序多级列

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

matplotlib + python foor loop

处理具有多个独立头的CSV文件

Matplotlib中的字体权重

Python避免mypy在相互引用中从另一个类重定义类时失败

如何在Great Table中处理inf和nans

polars:有效的方法来应用函数过滤列的字符串

将链中的矩阵乘法应用于多组值

查看pandas字符列是否在字符串列中