python - 您可以在协程列表上使用多处理或线程来加速程序执行吗?
问题描述
我目前有一个我创建的 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())
对于上面只使用一个进程和一个线程的代码,我是否可以在异步之上使用多处理或线程来加速执行?协程都是相互独立的,不需要交流或共享任何信息。
我想,一个相关的问题是:这实际上会导致加速吗?
解决方案
推荐阅读
- javascript - 为什么 ko.ObservableArray 中的替换值没有更新我的视图?
- javascript - 无法读取 client.users 的属性“缓存”
- react-native - react native asyncStorage 更新相同的产品编号
- geocoding - 如何在 here.com revgeocode API 调用中返回多个结果?
- java - 在 2 个具有不同要求的微服务中验证一个对象
- angular - 为什么 TypeScript 4 转译器没有看到这个不正确的类型传递给函数?
- reactjs - 响应中的凭据管理 API
- html - CSS 没有被应用到全身
- android - 在两个导航图之间跳转
- python - 我无法让我的烧瓶应用程序通过 google 和可用的 api 进行身份验证