Найти - Пользователи
Полная версия: Корректный выход из процесса
Начало » Python для экспертов » Корректный выход из процесса
1
lobster
Всех приветствую!
При порождении нескольких процессов, нужно чтобы каждый процесс мог завершать свою работу, не трогая другие процессы включая основной, похоже процесс не может убить сам себя при помощи 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() 

Вначале попробовал отправить через пайп сам объект процесса, вывалилось ексепшн о том что передавать объекты через пайп небезопасно, пришлось сделать словарь из имя_процесса => объект_процесса.
Какие есть еще методы корректного закрытия процессов детей?
PooH
А чем просто sys.exit() в дочерних процессах не устраивает?
lobster
PooH
А чем просто sys.exit() в дочерних процессах не устраивает?
Не проверив это, стал какие-то костыли городить. В начале думал что sys.exit() убивает и главный процесс тоже а с ним и детей-процессы.
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB