@AlexMine
Учусь

Как убить процессы запущенные с помощью multiprocessing через supervisor?

Добрый вечер, столкнулся с такой проблемой, у меня имеется чат-бот работает с помощью команды multiprocessing. запускается так:

def run_listen_event(q):
    while True:
        pass # тут исполняемый код который прослушивает сервер на события

def worker(q):
    while True:
        pass # тут исполняемый код который отправляет сообщения

# Запускаю так

event_list = Process(target=run_listen_event, args=(q, ))
event_list.start()

for _ in range(4):
    t = Process(target=worker, args=(q, ))
    t.start()

Получается я понимаю что запускаю 5 процессов, но при перезагрузки кода с помощью supervisorctl restart bot процессы не убиваются, а плодятся и из-за этого сервер отвечает на одно сообщение несколько раз.
Как сделать правильное убивание процессов? Чтобы я мог его перезапускать с помощью supervisor, а не рестартить сервер.
  • Вопрос задан
  • 679 просмотров
Решения вопроса 1
@AlexMine Автор вопроса
Учусь
Опытным путем, нашел решение, нужно добавить stopasgroup=true
killasgroup=true в supervisord.conf в настройки вашей запускаймой программы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
skipirich
@skipirich
проходил мимо
Можно вызывать Process с аргументом name т.е каждому процессу давать имя(уникальное). Так как процессы будут иметь имена, то перед запуском можно с помощью модуля psutil (вот тут примеры есть https://thispointer.com/python-check-if-a-process-... попытаться получить pid процесса по имени. Ну а если pid процесса получен можно будет его кильнуть с помощью os.kill()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы