You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:54:07