Реализация потребителя производителя в python, когда производитель использует приложение закрытого генератора - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь решить следующую проблему: мне нужно реализовать (в python) две задачи (процессы / потоки). Первый (я назову его производителем) выполняет задачу, которая генерирует серию текстовых файлов (я назову это генератором - эта задача выполняет закрытый код, который я не могу изменить, поэтому я не могу остановить его после каждого файла, например). Второй (я назову его потребителем) обрабатывает каждый текстовый файл (преобразует его в двоичный формат и использует его в качестве входных данных для другой задачи) и удаляет текстовый файл из папки после завершения. Мне нужно выполнить синхронизацию между двумя упомянутыми процессами, чтобы потребитель ожидал, пока производитель сгенерирует больше файлов, пока производитель все еще активен, и завершит работу, как только завершится работа производителя.

Какой самый правильный способ сделать это?

До сих пор я думал о следующем дизайне: производитель выполнит генератор, и как только это будет сделано, он напечатает что-то в указанный c файл «статуса». Потребитель будет использовать «grep», чтобы определить, доступно ли больше файлов в соответствующей папке, и время от времени читать файл состояния, чтобы проверить, будут ли еще генерироваться файлы. Однако мне кажется, что это грубое решение, которое, вероятно, заново изобретает какой-то известный шаблон проектирования / IP C. Я мог бы использовать простую потребительскую схему производителя (используя некоторый объект python IP C, такой как очередь), однако он, кажется, не отвечает моим потребностям, поскольку, насколько я понимаю, этот IP C предполагает, что производитель добавляет каждый новый элемент в очередь, что я не могу сделать в моем случае, так как это требует изменения кода генератора файлов.

Есть ли лучшее решение?

Спасибо!

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