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

如何解决基于Flask的Slack应用异步消息重复发送问题

问题根源

Flask 开启debug模式时会默认启动重载器(reloader),用来监听代码变更自动重启服务,此时会创建两个进程:

  • 一个是重载器监听进程
  • 一个是实际运行Flask服务的工作进程
    你写在全局作用域(if __name__ == "__main__"判断外部)的初始化代码会在两个进程中各执行一次,所以会出现两次异步消息发送。而斜杠命令的回调逻辑只有工作进程会接收Slack请求触发,所以不会重复发送。

解决方案

方案1:关闭Flask重载器

如果不需要代码变更自动重启的功能,直接在启动服务时加use_reloader=False参数即可:

if __name__ == "__main__":
    port = int(os.environ.get('PORT', 5000))
    bot.run(host='0.0.0.0', port=port, debug=True, use_reloader=False)

方案2:将初始化逻辑移入主进程判断块

把全局执行的异步消息发送、守护线程启动逻辑挪到if __name__ == "__main__"内部,这样只有主工作进程会执行这部分代码,重载进程不会触发:

if __name__ == "__main__":
    # 把原本全局的初始化代码移到这里
    slack_handle.sendTreasurer("Restarting Money Bot")
    td = threading.Thread(target = drive_access.mainDaemon)
    td.daemon = True
    td.start()

    port = int(os.environ.get('PORT', 5000))
    bot.run(host='0.0.0.0', port=port, debug=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:54:02