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

Python中Flask应用_thread线程函数重复执行问题求助

问题原因及解决办法

原因

你的代码里app.run设置了use_reloader=True,这是Flask的自动重载功能,它会启动两个进程:一个是监控文件变化的重载器进程,另一个是实际运行Flask应用的工作进程。这两个进程都会触发if __name__ == '__main__':代码块,所以_thread.start_new_thread(callPCo, ())会被执行两次,导致callPCo函数运行两次。

解决办法

有两种方案可以解决这个问题:

方案1:关闭自动重载功能

直接把use_reloader设为False,这样只会启动一个进程,线程只会执行一次:

def callPCo():
    requests.get("http://127.0.0.1:5120/pco")

if __name__ == '__main__':
    _thread.start_new_thread(callPCo, ())
    app.run(host = "127.0.0.1", port = "5115", use_reloader=False)

方案2:保留重载功能,仅在主进程启动线程

如果你需要保留自动重载,可以通过检查是否是重载器的子进程来控制线程启动,利用Flask重载器的环境变量判断:

import os
def callPCo():
    requests.get("http://127.0.0.1:5120/pco")

if __name__ == '__main__':
    # 仅在主进程启动线程,重载器进程跳过
    if not os.environ.get('WERKZEUG_RUN_MAIN'):
        _thread.start_new_thread(callPCo, ())
    app.run(host = "127.0.0.1", port = "5115", use_reloader=True)

内容的提问来源于stack exchange,提问作者wondergrandma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:17:01