python - python和line api中的全局变量有问题
问题描述
我正在尝试使用 line api 和 python 2.7.15 构建回复机器人。这是我的代码
from flask import Flask, request, abort
from linebot import (LineBotApi, WebhookHandler)
from linebot.exceptions import (InvalidSignatureError)
from linebot.models import (MessageEvent, TextMessage, TextSendMessage,)
app = Flask(__name__)
line_bot_api = LineBotApi('UIXwXWExxxxxxxxxxxxxxxxxxxxxxxxxxxx')
handler = WebhookHandler('458033a97c124xxxxxxxxxxxxxxxxxxxxx')
number = 1
@app.route("/")
def hello():
return str(number)
@app.route("/webhook", methods=['POST'])
def webhook():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
text = event.message.text
user_id = event.source.user_id
if(text == 'inc'):
#set global variable here
number += 1
line_bot_api.push_message(user_id,TextSendMessage(text=str(number)))
if __name__ == "__main__":
app.run()
然后我在heroku上实现这个,我尝试与我的机器人聊天,首先我发送消息inc
,他回复我2
然后我inc
再次尝试发送,他回复我3
,我再次尝试他回复我1
我再次尝试发送inc
他回复我4
有什么问题?为什么我的号码不能继续?
解决方案
Python 后端应用程序通常部署在多进程配置中(前端服务器 - apache、ngnix 或其他服务器 - 运行多个并行进程来处理传入请求),并且任何请求都可以由任何进程提供服务。全局变量是每个进程的,所以你会发现你的全局变量取决于哪个进程为请求提供服务。结论:不要使用全局变量来存储应用程序状态 - 使用共享数据库(任何类型的,它不必是 SQL 数据库,它只需要在所有进程之间共享)。
推荐阅读
- python - UnimplementedError:不支持将字符串转换为浮点数
- ruby - 在 ruby 的末尾打印一些内容
- sql-server - 在 Python Anaconda 环境中运行时,Pyodbc 在 2 小时后失去与 MS SQL Server 的连接
- express - Graphql如何上传多个文件而不仅仅是一个
- groovy - Groovy 闭包中使用的“final”修饰符的处理不一致
- javascript - Chrome 扩展程序 | 通过通配符替换网站 JavaScript 文件
- php - 昨天/上一个时间戳大于今天/现在。如果解决怎么办?
- reactjs - 多个 div 上的 React 中的 OnMouseEnter 无法正常工作
- python - 返回在另一个列表中找到的项目列表
- mongodb - 在 Kubernetes 部署中编写命令 args