首页 > 解决方案 > 您可以在协程列表上使用多处理或线程来加速程序执行吗?

问题描述

我目前有一个我创建的 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())

对于上面只使用一个进程和一个线程的代码,我是否可以在异步之上使用多处理或线程来加速执行?协程都是相互独立的,不需要交流或共享任何信息。

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

标签: pythonasynchronousmultiprocessingpython-asynciocoroutine

解决方案


推荐阅读