您可以在协程列表上使用多处理或线程处理来加快程序执行速度吗?

时间:2019-06-11 07:35:53

标签: python asynchronous multiprocessing python-asyncio coroutine

我目前有一个已创建的2000个协程的列表。我想使用多处理或线程化(瓶颈是I / O,所以我认为最好使用线程化),通过让每个进程/线程负责评估协程的一部分(每个协程约500个)来加快我的代码的速度。这可能吗?

我已经研究过asyncio.semaphore作为解决我的问题的可能方法,但是它并不能完全满足我的要求(实际上,当尝试asyncio.semaphore时,我遇到了“打开文件过多”的错误)。我正在运行Python3.6

async def some_coroutine_here(x):
    print('start: ', x)
    await asyncio.sleep(1)
    print('done ', x)
    return x

async def main():
    x = await asyncio.gather(*[some_coroutine_here(x) for x in range(2000)]) # list of coroutines

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

对于上述仅使用一个进程和一个线程的代码,我可以在异步之上使用多处理或线程来加快执行速度吗?协程彼此独立,不需要交流或共享任何信息。

我想,一个相关的问题是:这实际上会导致加速吗?

0 个答案:

没有答案