簡體   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