У меня есть приложение, написанное на 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Исключение с ведением журнала - так что я надеюсь, что в этот момент будет показана любая возникшая ошибка.