检查多个 apply_async全部运行完毕
时间: 2023-08-01 12:06:06 浏览: 70
Python3-异步进程回调函数(callback())介绍
你可以使用 `AsyncResult` 对象来检查多个 `apply_async` 方法是否全部运行完毕。首先,你需要为每个 `apply_async` 方法保存其返回的 `AsyncResult` 对象。然后,你可以使用 `ready()` 方法检查每个 `AsyncResult` 对象是否已经完成。最后,你可以使用 `all()` 方法将所有 `AsyncResult` 对象的 `ready()` 方法的返回值进行逻辑与操作,以判断是否所有的 `apply_async` 方法都已经完成。以下是一个示例代码:
```python
from multiprocessing import Pool
def foo(x):
return x * x
if __name__ == '__main__':
with Pool() as pool:
results = []
for i in range(5):
result = pool.apply_async(foo, args=(i,))
results.append(result)
# 检查所有的 apply_async 方法是否已经完成
all_done = all(result.ready() for result in results)
while not all_done:
all_done = all(result.ready() for result in results)
# 获取每个 apply_async 方法的结果
for result in results:
print(result.get())
```
在这个示例代码中,我们使用了一个 `Pool` 对象来并行执行 `foo` 函数。我们使用了一个列表 `results` 来保存每个 `apply_async` 方法的返回值。在 `for` 循环中,我们为每个 `i` 调用了 `apply_async` 方法,并将其返回的 `AsyncResult` 对象添加到 `results` 列表中。然后,我们使用一个 `while` 循环来检查所有的 `AsyncResult` 对象是否都已经完成,如果还有未完成的对象,则继续等待。最后,我们使用 `get()` 方法获取每个 `AsyncResult` 对象的结果,并将其打印出来。
阅读全文