Закрытие и открытие процессов по "Горячей клавише"

Я написал пример кода. Проверь пожалуйста его ниже:

from time import sleep

def o1():
    while True:
        print("Я 1, работаю : )")
        sleep(1)

def o2():
    while True:
        print("Я 2, работаю : )")
        sleep(1)

if __name__=="__main__":
    import multiprocessing
    p1 = multiprocessing.Process(target=o1)
    p2 = multiprocessing.Process(target=o2)
    p1.start()
    p2.start()

    def close():
        print("Закрываю o1")
        p1.join() #процесс в итоге не закрывается

    def start():
        print("Запускаю o1")
        try: #можно ли сделать как-то красивее?
            p1.start()
        except AssertionError:
            print("Процесс не закрыт")

    import keyboard
    keyboard.add_hotkey('q', close)
    keyboard.add_hotkey('e', start) #после нажатия q, ничего не происходит попытавшись нажать "е"

Мне нужно закрывать процесс и снова его открывать по горячей клавише. (я сделал два процесса в коде, так как это полностью отражает программу в которой мне нужна эта функция)

Заранее спасибо : )


Ответы (1 шт):

Автор решения: userpy

procs.py

from time import sleep

def o1():
    while True:
        print("1 : )")
        sleep(1)

def o2():
    while True:
        print("2 : )")
        sleep(1)

main.py

from procs import *

if __name__ == "__main__":
    import multiprocessing
    p1 = multiprocessing.Process(target=o1)
    p2 = multiprocessing.Process(target=o2)
    p1.start()
    p2.start()

    def close():
        print("close o1")
        p1.terminate()

    def start():
        global p1
        if p1.is_alive():
            return
        print("start o1")
        p1 = multiprocessing.Process(target=o1)
        p1.start()

    import keyboard
    keyboard.add_hotkey('q', close)
    keyboard.add_hotkey('e', start)
→ Ссылка