Как я могу запустить каждого работника в многопроцессорном режиме. Пул в новой оболочке?

Я пытаюсь связать выполнение порожденного процесса в рабочем пуле с новым системным терминалом. В следующем примере (адаптированном из ответа @ sylvain-leroux на этот вопрос) создается пул работников для выполнения некоторых задач с поставленными в очередь объектами.

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 , но мне нужно придерживаться реализации на основе пула из-за ограничений совместимости. Кто-нибудь там сделал это? Приветствуется руководство.

    One Solution collect form web for “Как я могу запустить каждого работника в многопроцессорном режиме. Пул в новой оболочке?”

    Попробуйте использовать Queue наоборот.

    Пусть рабочие put сообщения в Queue , а в родительском процессе get их из Queue и печатают их. Это должно избавиться от смешанной продукции.

    Если вы хотите передавать сообщения от родителя к работникам и обратно, используйте две очереди. Один для передачи сообщений рабочим, а другой – для передачи сообщений родителям.

    Python - лучший язык программирования в мире.