Я пытаюсь связать выполнение порожденного процесса в рабочем пуле с новым системным терминалом. В следующем примере (адаптированный из ответа @ sylvain-leroux на вопрос this) пул работников сконструирован для выполнения некоторой работы с объектами в очереди.Как я могу запустить каждого работника в многопроцессорном режиме. Пул в новой оболочке?
import os
import time
import multiprocessing
# A main function, to be run by our workers.
def worker_main(queue):
print('The worker at', os.getpid(), 'is initialized.')
while True:
# Block until something is in the queue.
item = queue.get(True)
print(item)
time.sleep(0.5)
if __name__ == '__main__':
# Instantiate a Queue for communication.
the_queue = multiprocessing.Queue()
# Build a Pool of workers, each running worker_main.
the_pool = multiprocessing.Pool(3, worker_main, (the_queue,))
# Iterate, sending data via the Queue.
for i in range(5):
the_queue.put("That's a nice string you got there.")
the_queue.put("It'd be a shame if something were to... garble it.")
worker_pool.close()
worker_pool.join()
time.sleep(10)
Если запустить это из терминала системы вы увидите кучу искаженного текста, потому что каждый из рабочих пишет к, и выполняется в, ту же консоль. Для проекта, над которым я работаю, было бы полезно создать новую оболочку/консоль для размещения каждого рабочего процесса, чтобы весь напечатанный вывод отображался в этой оболочке, а выполнение рабочего процесса - это хост в этой оболочке. Я видел несколько примеров, делающих это с помощью Popen
с использованием ключевого слова shell
, но мне нужно придерживаться реализации на основе пула из-за ограничений совместимости. Кто-нибудь там сделал это? Приветствуется руководство.
В Linux вы можете писать разделенные файлы и вручную открывать оболочки для использования команды 'watch -n 1 cat file.txt' для отображения нового содержимого файлов каждую секунду. – furas
Спасибо @furas. Это полезная идиома, которую нужно знать. Я обычно работаю в Linux, но я хотел бы, чтобы это решение было кросс-платформенным, для расширяемости. Кроме того, хотя это даст мне доступ к печатной информации, это не приведет к тому, что выполнение будет привязано к наблюдающей оболочке, что желательно для моего приложения. –