Можете ли вы использовать многопроцессорность или многопоточность в списке сопрограмм для ускорения выполнения программы? - PullRequest
0 голосов
/ 11 июня 2019

В настоящее время у меня есть список из 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())

Для приведенного выше кода, который использует только один процесс и один поток, могу ли я использовать многопроцессорную обработку или многопоточность поверх асинхронной обработки для ускорения выполнения? Сопрограммы все независимы друг от друга и не должны общаться или делиться какой-либо информацией.

Скорее всего, связанный вопрос: будет ли это на самом деле ускорением?

...