цикл не выполняется асинхронно в параллельном коде - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть следующая функция:

with ProcessPoolExecutor(max_workers=None) as executor:
            futures = [executor.submit(execute, row) for row in fetch_row()]
            for future in as_completed(futures):
                # do something

Согласно моему пониманию futures должно заполняться асинхронно, пока цикл for выполняет фьючерсы по мере их появления.

Я написал оператор печати прямо перед return в execute, чтобы убедиться, что функция действительно должна вернуться.

Кажется, что функция действительно отправляет задания параллельно, и они возвращаются, но цикл for не выполняет как задания возвращаются из соответствующего процесса, но только после того, как список полностью встроенный.

Я бы хотел выполнить for в то же время, когда поступает фьючерс.

fetch_row() - генератор, который только читает из файла CSV.

1 Ответ

0 голосов
/ 18 сентября 2018

Вместо создания списка

futures = [executor.submit(execute, row) for row in fetch_row()]

создать генератор (скобки вместо скобок):

futures = (executor.submit(execute, row) for row in fetch_row())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...