При порождении нескольких процессов, нужно чтобы каждый процесс мог завершать свою работу, не трогая другие процессы включая основной, похоже процесс не может убить сам себя при помощи self.terminate(), пришло в голову отправлять имя процесса через пайп главному процессу чтобы тот закрывал его:
from multiprocessing import Process, Pipe class Proc(Process): def __init__(self, client_msg): super(Proc, self).__init__() self.client_msg = client_msg def run(self): print("Run process %s" % (self.name)) self.quit() print("Test after quitting...") def quit(self): self.client_msg.send(self.name) (server_msg, client_msg) = Pipe() procs = {} for _ in range(5): p = Proc(client_msg) procs[p.name] = p p.start() while 1: msg = server_msg.recv() procs[msg].terminate()
Вначале попробовал отправить через пайп сам объект процесса, вывалилось ексепшн о том что передавать объекты через пайп небезопасно, пришлось сделать словарь из имя_процесса => объект_процесса.
Какие есть еще методы корректного закрытия процессов детей?