python多进程pool并行并用pipe获取返回值
时间: 2023-08-18 20:39:45 浏览: 163
在使用多进程池(`Pool`)时,可以使用 `apply_async` 方法异步地提交进程,并使用 `pipe` 获取返回值。以下是一个示例代码:
```python
import multiprocessing
def worker(num):
"""进程执行的函数"""
result = num * 2
return result
if __name__ == '__main__':
# 创建管道
parent_conn, child_conn = multiprocessing.Pipe()
# 创建进程池
pool = multiprocessing.Pool()
# 提交进程任务
result = pool.apply_async(worker, args=(10,))
# 关闭进程池
pool.close()
pool.join()
# 获取进程返回值
parent_conn.send(result.get())
parent_conn.close()
print(child_conn.recv())
```
在上面的示例代码中,我们创建了一个管道,使用 `Pipe` 函数返回了两个连接对象:`parent_conn` 和 `child_conn`。在进程池中,我们使用 `apply_async` 方法异步地提交进程任务,并使用 `get` 方法获取返回值。在主进程中,我们使用 `send` 方法将返回值发送到管道中,并使用 `recv` 方法从管道中接收数据,最终打印出结果。
需要注意的是,在使用 `apply_async` 方法时,必须先关闭进程池,然后调用 `join` 方法等待所有进程结束。否则,主进程将会一直等待,直到所有进程都执行完成。
阅读全文