Python中如何让子进程触发主进程执行指定代码(如休眠)
实现子进程触发主进程休眠的功能
需求:通过子进程检测键盘按键,当指定按键(如g键)被按下时,触发主进程进入休眠状态,暂停主进程的执行(停止打印"global execution"达100秒)。现有示例代码中子进程内的
time.sleep(100)仅会让子进程自身休眠,需修改为让主进程执行该休眠操作。
修改后的代码
import time import multiprocessing import keyboard def check_if_button_is_pressed(button, sleep_event): while True: if keyboard.is_pressed(button): # 设置事件,通知主进程执行休眠 sleep_event.set() # 等待按键释放,避免重复触发 while keyboard.is_pressed(button): time.sleep(0.1) def main(): # 创建进程间通信的事件对象,用于子进程通知主进程 sleep_event = multiprocessing.Event() # 启动子进程,传入检测按键和事件对象,设置daemon=True让子进程随主进程退出 multiprocessing.Process(target=check_if_button_is_pressed, args=("g", sleep_event), daemon=True).start() while True: # 检查子进程是否触发了休眠事件 if sleep_event.is_set(): print("主进程进入休眠...") time.sleep(100) # 休眠结束后清除事件,恢复正常执行 sleep_event.clear() print("主进程恢复执行") print("global execution") time.sleep(0.1) # 降低打印频率,避免终端输出过载 if __name__ == "__main__": main()
关键说明
- 进程间通信:使用
multiprocessing.Event实现子进程与主进程的信号传递,子进程触发按键后设置事件,主进程通过检测事件状态执行休眠操作。 - 避免重复触发:子进程中加入按键释放等待逻辑,防止按住
g键时多次触发主进程休眠。 - 守护进程:给子进程设置
daemon=True,确保主进程退出时子进程自动终止,避免残留后台进程。 - 打印频率控制:主进程循环中添加
time.sleep(0.1),减少打印次数,优化终端输出体验。
内容的提问来源于stack exchange,提问作者Calabran
相关产品推荐
相关产品推荐

