我正在尝试使用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
怎么了为什么我的电话号码不继续?
答案 0 :(得分:1)
Python后端应用程序通常以多进程配置进行部署(前端服务器-apache,ngnix或其他服务器-运行多个并行进程来处理传入的请求),任何请求都可以由任何进程提供服务。全局变量是每个进程的,因此您将找到全局状态取决于哪个进程处理了请求。结论:不要使用全局变量来存储应用程序状态-使用共享数据库(任何类型,它都不必是SQL数据库,只需要在所有进程之间共享即可)。