Python异步多处理编程,带有回调



我正在尝试通过Python中的回调来实现异步多处理编程。我阅读了有关多处理模块,过程/线程池和异步模块的材料,但无法指向。我有一个像

这样的卷曲和回调功能
async def func(x):
   value = await (other coroutine)
   return x 
def callback(x):
   print(x)

我想将功能(1(,func(2(,func(3(,...,func(100(提交给给定数字的工作流程池,例如5个流程。然后,我想让那些工人在任何返回值到达父进程时都调用回调,而不是在每个返回值到达父进程之后。

MAP/MAP_ASYNC/starmap/starmap_async方法多处理中的方法等待工作流程中的所有返回都到达父进程。我研究了python中异步模块中异步编程的基本元素,但是对于我来说,完成上述任务仍然难以捉摸 - 异步的多处理编程,带有回调

有人可以给我一个清醒的示例代码吗?

预先感谢。

我认为您想要以骇人听闻的方式:

import asyncio
import random
from concurrent.futures import ProcessPoolExecutor

async def do_sth(future, n):
    await asyncio.sleep(random.randint(1, 5))
    future.set_result('{} is done!'.format(n))

def got_result(fut):
    print(fut.result())
if __name__ == '__main__':
    executor = ProcessPoolExecutor(5)
    task = []
    loop = asyncio.get_event_loop()
    for n in range(1, 100):
        future = asyncio.Future()
        task.append(
            asyncio.ensure_future(do_sth(future, n))
        )
        future.add_done_callback(got_result)
    try:
        loop.run_until_complete(asyncio.gather(*task))
    finally:
        loop.close()

但我建议您考虑您从Combine Multi-Process和Asyncio回调中真正获得的收益,我认为您实际想要的可能是 queue和Multi-Process

最新更新