我正在用Python开发一个智能机器人,它使用OpenAI和其他服务的API。机器人应该顺序处理会话,确保在开始下一个会话之前完全处理一个会话。会话由多个阶段组成,例如请求然后接收“挑战”(消息1),“关键字”(消息2)等,它还创建一个用于写入信息的文件。
我面临的问题是,当我在Heroku上运行应用程序时,它似乎正在从同一个Slack聊天中并行生成多个对话。例如,当我收到消息1中的“挑战”时,应用程序似乎也将该输入视为“关键字”,导致同时创建多个文件并混淆对话。
有趣的是,当我在ngrok上运行这个应用程序时,它运行得很好,这让我怀疑这个问题可能与Heroku在Python中管理进程的方式有关。
我一直在Heroku上的专用服务器上使用单个dyno测试应用程序,但我还没有能够解决这个问题。日志上没有错误,只是混乱的通信。我正在寻找一种解决方案,以确保应用程序顺序处理这些对话,以便一次只处理一个对话。我不希望并行对话。
这是我的Proc文件的内容:
web: gunicorn app:app
字符串
提前感谢!
1条答案
按热度按时间bfrts1fy1#
Heroku的文档:
Gunicorn在每个dyno中fork多个系统进程,以允许Python应用程序支持多个并发请求,而无需它们是线程安全的。
告诉Gunicorn要使用多少个worker的一种方法是设置一个名为
WEB_CONCURRENCY
的环境变量,Heroku会自动执行:WEB_CONCURRENCY
环境变量由Heroku根据进程的Dyno大小自动设置。此功能旨在为您的应用程序提供合理的起点。我们建议您了解进程的内存需求并相应地设置此配置变量。如果您想将应用程序限制为一个worker*,请将
WEB_CONCURRENCY
config var(Heroku环境变量)设置为1。您可以通过 Jmeter 板或CLI执行此操作:字符串