繁体   English   中英

带有回调的python异步多处理编程

[英]python asynchronous multiprocessing programming with callbacks

我正在尝试用python中的回调实现异步多处理编程。 我阅读了有关多处理模块,进程/线程池和asyncio模块的资料,但没有重点。 我有一个例程和一个回调函数,例如

async def func(x):
   value = await (other coroutine)
   return x 

def callback(x):
   print(x)

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

多重处理中的map / map_async / starmap / starmap_async方法。池等待工作进程的所有返回都到达父进程。 我在python的asyncio模块中研究了异步编程的基本元素,但要完成上述任务,仍然难以捉摸-带有回调的异步多处理编程

有人可以给我这个任务的清晰示例代码吗?

提前致谢。

我认为您想要这种方式:

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()

但是我建议您考虑一下从多进程和异步回调相结合中实际获得的收益,我想您实际上想要的可能是队列和多进程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM