python3增加一个全局变量会导致bot在部署到heroku时随机化响应

2024-10-03 17:17:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道该怎么回答这个问题,因为我不知道是什么引起了这个问题。我认为在将全局变量部署到Heroku时,增加全局变量会导致问题。在

我有一个机器人,需要按顺序提问。我设法使它工作,当我在我的机器上测试它时,它工作得很好。但是,当Bot被部署到Heroku时,它会发疯,问一些随机的问题,并且不按顺序显示随机的事实。在

下面是它的工作原理

question_dict = {
            'Locq0':[{'question':"Some question 0",'options':(["Continue","@continue"])}],
            'Locq1':[{'question':"Some question 1",'options':(["Continue","@continue"])}],
            'Locq2':[{'question':"Some question 2",'options':(["Continue","@continue"])}],}

问题在一个dict里面,所以我做了一个函数来循环dict

^{pr2}$

所以每次我从用户那里得到一个正确的答案,我就增加计数器,并将当前计数器的值传递给测验函数。在

例如:

初始计数器设置为0。如果用户单击“继续”按钮,计数器将递增1,并将当前计数器值传递给quizz(),则测验函数将显示下一个问题。在

对于计数器0=>;问题\u dict['Locq0']

对于计数器1=>;问题\u dict['Locq1']

等等。这将发生在口述中的所有问题上

当我在我的机器上测试时,所有这些工作都很好。但是当bot被部署到heroku时,我不知道计数器会发生什么,它会显示dict中的随机问题。我还设置了一个调试文本来显示计数器值,它一直在变化。有时值是1,下一个值是3、4或0,或者它自己重复。在

Counter是一个全局变量,我认为这导致了heroku的问题。 有人知道这是怎么回事或者为什么要这么做吗?在


Tags: 函数机器heroku顺序部署计数器somedict
1条回答
网友
1楼 · 发布于 2024-10-03 17:17:48

快速回答:HTTP是一种无状态协议,因此您必须在HTTP请求中传递整个状态,或者将状态存储在服务器端的“会话”机制中。在

更长的答案:web应用通常由多进程前端web服务器提供服务,这意味着您将有N个(独立的)进程来处理传入的HTTP请求。哪一个服务于哪个请求是完全不可预测的。你不能依赖全局变量(预处理)来保持请求之间的状态。在

第一个解决方案是使用sessions而不是global(在flask中有很多方法可以这样做,所以google“flask session”并选择您喜欢的任何东西)

另一种解决方案是将下一个测试id传递给模板,这样它就可以与表单一起提交,也可以作为url的一部分提交(在url路径或querystring中)。在

相关问题 更多 >