在Heroku上部署Slack bot的问题:多个并行对话

falq053o  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(96)

我正在用Python开发一个智能机器人,它使用OpenAI和其他服务的API。机器人应该顺序处理会话,确保在开始下一个会话之前完全处理一个会话。会话由多个阶段组成,例如请求然后接收“挑战”(消息1),“关键字”(消息2)等,它还创建一个用于写入信息的文件。
我面临的问题是,当我在Heroku上运行应用程序时,它似乎正在从同一个Slack聊天中并行生成多个对话。例如,当我收到消息1中的“挑战”时,应用程序似乎也将该输入视为“关键字”,导致同时创建多个文件并混淆对话。
有趣的是,当我在ngrok上运行这个应用程序时,它运行得很好,这让我怀疑这个问题可能与Heroku在Python中管理进程的方式有关。
我一直在Heroku上的专用服务器上使用单个dyno测试应用程序,但我还没有能够解决这个问题。日志上没有错误,只是混乱的通信。我正在寻找一种解决方案,以确保应用程序顺序处理这些对话,以便一次只处理一个对话。我不希望并行对话。
这是我的Proc文件的内容:

web: gunicorn app:app

字符串
提前感谢!

bfrts1fy

bfrts1fy1#

Heroku的文档:
Gunicorn在每个dyno中fork多个系统进程,以允许Python应用程序支持多个并发请求,而无需它们是线程安全的。
告诉Gunicorn要使用多少个worker的一种方法是设置一个名为WEB_CONCURRENCY的环境变量,Heroku会自动执行:
WEB_CONCURRENCY环境变量由Heroku根据进程的Dyno大小自动设置。此功能旨在为您的应用程序提供合理的起点。我们建议您了解进程的内存需求并相应地设置此配置变量。
如果您想将应用程序限制为一个worker*,请将WEB_CONCURRENCYconfig var(Heroku环境变量)设置为1。您可以通过 Jmeter 板或CLI执行此操作:

heroku config:set WEB_CONCURRENCY=1

字符串

  • 一个更健壮的解决方案是更新应用程序代码,以便在有多个工作者的情况下不会中断,但这是一个太大的问题,无法在这里回答。

相关问题