Python Flask或Heroku是否未能很好地跟踪全局变量?
我在Heroku服务器上安装了聊天机器人,该服务器在gunicorn框架上运行Python3.8中的Flask。除了一个全局变量外,一切都运行良好。以下是我与此问题相关的代码;我对python不是很有经验,所以这可能是我忽略的一个简单错误Python Flask或Heroku是否未能很好地跟踪全局变量?,python,flask,heroku,gunicorn,chatbot,Python,Flask,Heroku,Gunicorn,Chatbot,我在Heroku服务器上安装了聊天机器人,该服务器在gunicorn框架上运行Python3.8中的Flask。除了一个全局变量外,一切都运行良好。以下是我与此问题相关的代码;我对python不是很有经验,所以这可能是我忽略的一个简单错误 import os import sys import json from flask import Flask, request import requests from random import randint import datetime ...
import os
import sys
import json
from flask import Flask, request
import requests
from random import randint
import datetime
...
@app.route('/spam', endpoint = 'spam', methods=['POST'])
def webhook():
log('The Talker Log: Received a ping to the /spam endpoint.')
global spam_message_count
spam_message_count += 1
if spam_message_count == 1:
post_message('The Talker', 'SPAM HAS BEEN ACTIVATED. Message #1', '')
else:
post_message('The Talker', 'SPAM Message #{}'.format(spam_message_count), '')
return "ok", 200
(其他方法未显示)这段有问题的代码没有任何价值,它实际上只是以后的测试
此设置包括一台单独的机器,该机器使用cron每分钟ping一次/spam端点。设置此设置后,我从聊天机器人收到以下消息:
垃圾邮件已被激活。消息#1
一分钟后
垃圾邮件已被激活。消息#1
一分钟后
垃圾邮件#2
一分钟后
垃圾邮件#3
一分钟后
垃圾邮件#4
一分钟后
垃圾邮件#5
一分钟后
垃圾邮件#2
一分钟后
垃圾邮件#3
一分钟后
垃圾邮件#4
一分钟后
垃圾邮件#6
在让它运行了大约40分钟后,它只在22点结束。我真的不确定变量在哪里出错,希望您能提供帮助。Heroku运行您的应用程序的容器化版本,但不保证您的应用程序将持续运行。dyno会不时透明地重新启动,免费帐户会在30分钟无活动后看到dyno关闭-只有在收到请求时才会重新启动。这意味着您不能将应用程序的状态存储在应用程序本身中,即您打算在单个请求之外使用的全局变量
您的最佳选择可能是在数据存储中的请求之间保留您希望保存的任何状态。在你的情况下,你可以考虑也许你应该把它保存在文件或数据库中。此变量在一个线程中可以是全局变量,但服务器可能使用多个线程/进程,然后其他进程有自己的变量
spam\u message\u count