【发布时间】:2019-03-22 11:29:36
【问题描述】:
在编写烧瓶服务器时,我发现自己处于与此类似的情况:
from flask import Flask, jsonify
app = Flask(__name__)
x = 0
@app.route('/method_a', methods=['GET'])
def method_a():
global x
x = x + 1
return jsonify({'mesaage': 'value of x incremented by 1 is: '+str(x)}), 200
@app.route('/method_b', methods=['GET'])
def method_b():
global x
x = x + 2
return jsonify({'message': 'value of x increased by 2 is: '+str(x)}), 200
在这里,我尝试通过来自客户端的 GET 请求调用两种方法。因此,当单个客户端向“/method_b”发出 2 个请求时,输出应该是 4,依此类推。现在我的问题是,当服务器在真实网络中运行时,多个客户端会尝试调用它的方法。所以如果第一个客户端调用'/method_a'一次,他得到输出1,同时其他客户端也会调用方法,从而改变x的值。因此,当第一个客户端在“/method_a”上发出第二个请求时,它不会得到输出为 2。
但是我想创建一个服务器,它将变量值视为不同客户端的不同值,并仅向它们显示变量值的版本。我正在使用全局变量,因为这两种方法都需要此变量才能起作用,并且由于它们是由 GET 请求调用的,因此我无法通过客户端传递变量的值。如何解决这个问题?有没有更好的方法来编写这段代码来解决上述问题?
【问题讨论】:
-
您可以让客户端在 get 请求中返回
x的当前值。例如/method_a?current=2。这样你就不用在服务器端存储状态了。
标签: python flask global-variables