Windows环境Python3.7如何实现指定时间后终止方法执行
问题原因
你提供的代码逻辑本身没有语法错误,Windows平台下无法观察到func1执行输出的核心原因是子进程标准输出缓冲未刷新:Windows 下 Python 的 multiprocessing 采用 spawn 方式启动子进程,子进程的 print 输出默认会进入缓冲区,没有主动刷新的情况下不会实时打印到控制台,导致你误以为func1未被调用。
修复原代码的方案
只需要给所有print语句添加flush=True参数强制刷新缓冲区,同时优化进程终止逻辑保证资源正常释放即可,修改后代码如下:
from multiprocessing import Process import time def func1(name): print("Hi from func1", flush=True) i = 0 while True: i += 1 print('hello', name, flush=True) time.sleep(1) if __name__ == '__main__': p = Process(target=func1, args=('bob',)) p.start() # 等待5秒后检查子进程状态 p.join(timeout=5) if p.is_alive(): p.terminate() p.join() # 等待子进程资源完全释放
其他适配Python3.7+Windows平台的实现方案
- 线程方案:仅适合目标方法内部可以添加退出标记的场景,无法强制终止无退出判断的死循环任务
import threading import time exit_flag = False def func1(name): global exit_flag print("Hi from func1") i = 0 while not exit_flag: i += 1 print('hello', name) time.sleep(1) if __name__ == '__main__': t = threading.Thread(target=func1, args=('bob',)) t.start() time.sleep(5) exit_flag = True t.join()
- 注意:Windows平台不支持
signal模块的SIGALRM定时器,类Unix平台常用的信号超时方案在Windows下无法正常运行,不要采用。
内容的提问来源于stack exchange,提问作者user17068386
相关产品推荐
相关产品推荐

