Стоит ли выбирать asyncio вместо gevents для параллельной обработки в Python3 .x? - PullRequest
1 голос
/ 17 февраля 2020

Задача состоит в том, чтобы одновременно запустить несколько команд UNIX grep для файлов журнала, используя модуль подпроцесса. Синхронный запуск этих команд grep занимает много времени и, следовательно, требуется распараллеливать его.

Команды Grep, которые я хочу выполнять параллельно:

grep "start" /var/log/application/start.log.gz
grep "end" /var/log/application/end.log.gz
grep "proceed" /var/log/application/proceed.log.gz

Должен ли я выбрать asyncio или выбрать для gevents?

1 Ответ

1 голос
/ 18 февраля 2020

Q : Должен ли я выбрать asyncio или выбрать gevents?

Ну, лучше ни того, ни другого. Зачем оплачивать дополнительные расходы три раза (?) , если можно заставить parallel запустить его?

Если существует действительно разумная мотивация для таких задач запускаться, но ALAP и одновременно (то есть под одним общим общим «потолком» для пропускной способности дискового ввода-вывода и mem-I / O), но с минимальными дополнительными затратами на дополнительные расходы - измерьте их, прежде чем понизить голосование, не имея при этом серьезных фактов рука (верно, python выполнение на основе процессов имеет огромное значение - не так уж и близко к нескольким [us] - дополнительные затраты на реализацию процессов, тем хуже в Windows -классе O / S, где полная копия всего состояния интерпретатора python, включая все его переменные, объекты и все их структуры данных, богатые памятью, была сначала создана заново для каждого подпроцесса (прочитайте multiprocessing подробности документации о параллелизме на основе процессов и о дополнительных рисках согласованности, для которых fork метод создания экземпляров начал считаться небезопасным на O / S, что позволяет это (не все делают в 2020-Q1))

* 102 4 * Лучше попробуйте использовать всего один процесс с помощью достаточно продуманного, продуманного, умного и хорошо настроенного инструмента для одновременной работы с GNU parallel (лучше всего начать с чтения man parallel для всех готовых к использованию parallel настраиваемых параметров отправки задания)

Пример:

Grep-команды, в которых я хочу выполнить Параллельно:

Python можно запустить, но это и обрабатывать журнал и выходные данные соответственно, при необходимости

  parallel --jobs 3           \
           --halt now,fail=1   \
           --joblog LastRUN.log \
      grep {} /var/log/application/{}.log.gz ::: start proceed end

приведет к одинаковой обработке

grep "start"   /var/log/application/start.log.gz
grep "end"     /var/log/application/end.log.gz
grep "proceed" /var/log/application/proceed.log.gz

(плюс может служить более удобным способом обработки неудачных случаев, зарегистрированных выходов и т. Д. c). )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...