Многопроцессорная обработка Python в Docker - 1 процесс перестает выполняться без вывода сообщений, если я пытаюсь создать более 2 процессов - PullRequest
0 голосов
/ 04 октября 2019

У меня есть приложение, написанное на Python 2.7, которое создает ряд процессов для выполнения важной задачи (занимает около 1 минуты).

Я могу успешно запустить это на своем ноутбуке / хост-машине с 4 процессамизапущен, но когда я пытаюсь запустить код внутри контейнера Docker, один из процессов останавливает выполнение задачи на 75%.

Это означает, что я никогда не смогу выйти / продолжить после последнего вызова Queue.get()

Я думаю, что это связано с ресурсами, которые может использовать Docker, но тихая ошибка / зависаниеоставляя меня сбитым с толку, что попробовать.

Код, который я имею, делает что-то вроде этого:

batches = 4
output = Queue()
processes = []

#### Create the Processes
for batch in range(batches):
    parameter_dict = {
        'batch_id': batch,
        'config': self.config
    }

    processes.append(Process(target=simulation_task, args=(parameter_dict, output)))

#### Start the processes
for process in processes:
    logger.info('starting process')
    process.start()

logger.info("Batches being run: %s -- CPU counts: '%s'" % (batches, multiprocessing.cpu_count()))

########################################
## Collect results that processes have put on Queue
########################################
results = []
for _ in processes:
    queue_result = output.get()
    results.append(queue_result['results'])
    logger.info("Access result complete from batch %s" % queue_result['batch_id'])

    completed_batch_process = processes[queue_result['batch_id']]
    logger.info("Stopping process %s" % completed_batch_process.name)
    completed_batch_process.join()

Я также хотел бы добавить, что функция simulate_task имеет try-catchИсключение с ведением журнала - так что я надеюсь, что в этот момент будет показана любая возникшая ошибка.

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