Это зависит от вашего варианта использования.Если все, что вы хотите сделать, это завершить процессы, вы можете использовать метод Process.terminate()
, чтобы остановить их.Вы также можете передать объект multiprocessing.Event
процессам при их создании, а затем сделать так, чтобы основной процесс перехватил KeyboardInterrupt
, а затем установить объект события.Вам нужно будет проверить событие в дочернем процессе, чтобы узнать, пора ли завершить работу.Если вы делаете более сложные сообщения, вы можете вместо этого использовать multiprocessing.Queue
.Черт возьми, вы даже можете использовать сокеты для отправки сообщений между вашими процессами.Вот пример использования multiprocessing.Event
:
from multiprocessing import Process, Event
from time import sleep
def proc(n, event):
while not event.wait(1.0):
pass
def main():
event = Event()
procs = []
for i in range(4):
procs.append(Process(target=proc, args=(i, event)))
procs[-1].start()
while True:
try:
sleep(1)
except KeyboardInterrupt:
event.set()
break
for p in procs:
p.join()