threadpoolexecutor获取返回值 python
时间: 2023-09-27 20:08:50 浏览: 97
在Python中,`concurrent.futures.ThreadPoolExecutor`提供了一种方便的方式来管理线程池,但是它不直接返回结果。相反,您可以使用`submit`方法将可调用对象提交到线程池中,并返回一个Future对象。您可以使用Future对象的`result()`方法来获取可调用对象的返回值。
以下是一个示例代码:
```python
from concurrent.futures import ThreadPoolExecutor
def task(x):
return x * x
if __name__ == '__main__':
with ThreadPoolExecutor(max_workers=2) as executor:
future1 = executor.submit(task, 2)
future2 = executor.submit(task, 3)
print(future1.result())
print(future2.result())
```
在这个示例中,我们定义了一个简单的任务函数`task`,它接受一个参数并返回它的平方。然后,我们使用`ThreadPoolExecutor`创建一个具有两个工作线程的线程池,并将两个任务提交给线程池。使用`future1.result()`和`future2.result()`方法获取任务的结果。注意,这些方法会阻塞直到结果可用为止。
如果您需要等待所有任务完成并收集结果,您可以使用`as_completed`函数遍历所有Future对象,并使用`result()`方法获取每个任务的结果。以下是一个示例代码:
```python
from concurrent.futures import ThreadPoolExecutor, as_completed
def task(x):
return x * x
if __name__ == '__main__':
with ThreadPoolExecutor(max_workers=2) as executor:
futures = [executor.submit(task, i) for i in range(5)]
for future in as_completed(futures):
print(future.result())
```
在这个示例中,我们定义了一个任务函数`task`,它接受一个参数并返回它的平方。然后,我们使用`ThreadPoolExecutor`创建一个具有两个工作线程的线程池,并将五个任务提交给线程池。使用`as_completed`函数遍历所有Future对象,并使用`result()`方法获取每个任务的结果。注意,`as_completed`方法会阻塞直到所有任务完成为止。
阅读全文