Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 20, 2015 16:00:39

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректный выход из процесса

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

Вначале попробовал отправить через пайп сам объект процесса, вывалилось ексепшн о том что передавать объекты через пайп небезопасно, пришлось сделать словарь из имя_процесса => объект_процесса.
Какие есть еще методы корректного закрытия процессов детей?



Офлайн

#2 Сен. 20, 2015 16:54:38

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Корректный выход из процесса

А чем просто sys.exit() в дочерних процессах не устраивает?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Сен. 20, 2015 17:12:35

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректный выход из процесса

PooH
А чем просто sys.exit() в дочерних процессах не устраивает?
Не проверив это, стал какие-то костыли городить. В начале думал что sys.exit() убивает и главный процесс тоже а с ним и детей-процессы.
Спасибо!



Отредактировано lobster (Сен. 20, 2015 17:13:27)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version