python进程池怎么输出结果
时间: 2024-11-06 14:15:37 浏览: 4
python多进程(加入进程池)操作常见案例
在Python中,使用`concurrent.futures`模块创建进程池时,你可以通过多种方式获取并输出结果。下面是一些常见的方法:
1. **异步执行(asynchronous)**:
使用`ThreadPoolExecutor.map()`方法时,不会立即得到所有任务的结果,而是在每个子进程完成时返回。你需要通过迭代或注册回调来获取结果,例如:
```python
with ThreadPoolExecutor(max_workers=4) as executor:
future_results = {executor.submit(func, arg): i for i, (func, arg) in enumerate(tasks)}
for future in concurrent.futures.as_completed(future_results):
result = future.result()
print(f"Result {future_results[future]} is {result}")
```
2. **同步执行(synchronous)**:
如果你想阻塞等待每个任务完成后返回结果,可以使用`submit()`方法配合`get()`方法,如:
```python
with ThreadPoolExecutor(max_workers=4) as executor:
results = [executor.submit(func, arg) for func, arg in tasks]
for i, result in enumerate(concurrent.futures.wait(results)):
if result[0].done():
print(f"Result {i} is {result[0].result()}")
```
3. **回调函数(callback functions)**:
可以提供一个函数作为参数,当子进程完成任务时自动调用,传递结果:
```python
def process_result(result, index):
print(f"Result at position {index}: {result}")
with ThreadPoolExecutor(max_workers=4) as executor:
for i, future in enumerate(executor.map(func, args)):
future.add_done_callback(lambda x: process_result(x.result(), i))
```
无论哪种方法,都要确保处理可能出现的异常,因为`Future`对象可能会抛出运行时错误。
阅读全文