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)。这里有两种解决方案:
suspend
和resume
过程,而不是终止它这是第二种方法的实现。由于存在多处理问题,我不得不将代码分割成多个文件:
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句