В настоящее время у меня есть список из 2000 сопрограмм, которые я создал. Я хочу использовать многопроцессорность или многопоточность (узким местом является ввод-вывод, поэтому я предполагаю, что многопоточность предпочтительнее), чтобы ускорить мой код за счет того, чтобы каждый процесс / поток отвечал за оценку фрагмента сопрограмм (может быть, 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())
Для приведенного выше кода, который использует только один процесс и один поток, могу ли я использовать многопроцессорную обработку или многопоточность поверх асинхронной обработки для ускорения выполнения? Сопрограммы все независимы друг от друга и не должны общаться или делиться какой-либо информацией.
Скорее всего, связанный вопрос: будет ли это на самом деле ускорением?