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

#python #multiprocessing

#python #многопроцессорная обработка

Вопрос:

Я использую список для отслеживания всех процессов, создаваемых в системе, и хочу реализовать механизм очистки для удаления тех, которые остановлены. Вот простой пример:

 import multiprocessing as mp

class WorkerManager:
    def __init__(self):
        self.process_list = []
    def spawn_process(self):
        process = mp.Process(target=foo, args=(arg1, ))
        self.process_list.append(process)
        process.start()
  

Если я перебираю список и вызываю multiprocess.terminate() процессы, которые не являются активными, я все равно вижу там объекты. Как я могу безопасно удалить ссылки?

Примечание: хотя этого нет в приведенном выше примере кода, я правильно вызываю multiprocessing.join() после завершения каждого рабочего процесса.

Комментарии:

1. Вы пробовали вызывать .close() процесс? Вы уверены, что процесс еще не запущен?

2. Что вы подразумеваете под «я все еще вижу там объекты».? Завершение процессов не приведет к их удалению из любого места. Кроме того, рассмотрите возможность использования Pool in multiprocessing.pool для управления несколькими процессами.

3. @Carcigenicate Я имел в виду, что ссылки остаются в списке даже после завершения. Итак, self.process_list в итоге получается много объектов процесса, которые остановлены. Я хотел удалить их из списка.