Глядя на создание скрипта python, который запускает бесконечный цикл чтения из stdin, как for line in sys.stdin:
. Для каждой итерации я хотел бы получить работника из пула, который выполняется в фоновом режиме, используя line
в качестве входных данных. Процесс завершения выполнения или тайм-аута отпечатков на stdout.Непрерывное параллельное выполнение Python
Мне сложно найти модуль рабочего пула, который может работать непрерывно. Например, multiprocess pool module поддерживает только такие функции, как join
, которые ждут, когда все работники закончат все задания. Для вышеприведенной спецификации я не могу заранее знать все задачи и назначать работу, как это происходит с процессами в фоновом режиме.
Вы можете использовать отдельный процесс, который потребляет из очереди результатов от рабочие (процесс также), печатающий его на стандартный вывод. – bhdnx
Воспроизведение идеи ... Каждая строка добавляется в очередь. Затем каждый процесс непрерывно проверяет очередь для строки. (Нужно ли блокировать очередь, чтобы несколько процессов не удаляли одну и ту же строку из очереди?). Тогда, если есть строка, процесс удалит ее из очереди и напечатает результат в stdout, после чего он вернется к просмотру очереди? Как заставить процесс отключиться, если работа занимает слишком много времени и для продолжения? Вы знаете какие-либо примеры в Интернете? –
У вас есть процесс создания нереста mainloop (..., args = (очередь, строка)) по мере поступления каждой новой строки. Между тем, ранее обработанный процесс обрабатывает очередь и печатает результаты. https://docs.python.org/3.6/library/multiprocessing.html – bhdnx