如何让Python闹钟的两个进程同时运行?
问题根源
你创建进程时犯了一个关键错误:直接调用了函数(加了括号()),而不是把函数对象传给target参数。这会导致在创建Process实例的时候,就立即同步执行了alarm_sound()和window(),完全没有启动新进程,自然是交替执行。
修复方案
修改进程创建的代码,去掉函数名后的括号,只传递函数对象给target:
# 错误写法:直接调用函数,导致同步执行 # process1=Process(target=alarm_sound()) # process2=Process(target=window()) # 正确写法:传递函数对象,由进程启动时调用 process1 = Process(target=alarm_sound) process2 = Process(target=window) process1.start() process2.start() process1.join() process2.join()
额外注意事项
- Tkinter与多进程的兼容性:Tkinter的GUI只能在主进程中运行,子进程创建Tk窗口可能引发崩溃或异常。建议把窗口逻辑放在主进程,用多线程处理音效播放(IO密集型任务更适合线程)。
- 循环退出问题:最后一个
while True循环在触发闹钟后会持续重复创建进程,需添加break退出循环:if current_time == user_time: print(name_of_alarm) # 进程创建与启动代码... break # 触发后退出循环 - 多线程替代方案:如果只是同时播放音效和显示窗口,用
threading更轻量,修改逻辑和多进程一致:from threading import Thread thread1 = Thread(target=alarm_sound) thread2 = Thread(target=window) thread1.start() thread2.start() thread1.join() thread2.join()
内容的提问来源于stack exchange,提问作者user561459
相关产品推荐
相关产品推荐

