#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
inmultiprocessing.pool
для управления несколькими процессами.3. @Carcigenicate Я имел в виду, что ссылки остаются в списке даже после завершения. Итак,
self.process_list
в итоге получается много объектов процесса, которые остановлены. Я хотел удалить их из списка.