按"Hotkey"关闭和打开过程


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("close o1")
p1.join() #the process does not end as a result
def start():
print("start o1")
try:
p1.start()
except AssertionError:
print("Nothing")
import keyboard
keyboard.add_hotkey('q', close)
keyboard.add_hotkey('e', start) #after q, nothing happens trying to press "e"

我需要关闭进程并通过热键重新打开它。(我在代码中做了两个过程,因为这完全反映了我需要这个功能的程序(

对不起我的英语:(

首先,p1.join()耐心地等待p1自己完成——它不会这样做,因为它正在运行一个无限循环。此处使用p1.terminate()

其次,您不能重新启动已完成的进程(事实上,这就是您错误捕获的AssertionError(。这里有两种解决方案:

  1. suspendresume进程,而不是终止它
  2. 开始一个全新的流程

这是我对第二种方法的实现。由于多处理的怪癖,我不得不将代码拆分到多个文件中:

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)

相关内容

  • 没有找到相关文章

最新更新