烧瓶多处理



我正在尝试开发一个小应用程序,它基本上会根据用户提供或请求的数据集绘制一些图表。process_order函数应并发运行不同的数据集。出于某种原因,我只得到第一个图表,而不是第二个和连续的图表。我打开了与不同用户的不同浏览器会话,得到了相同的结果。

示例,我尝试从 IE 打开一个浏览器,另一个从 Chrome 打开一个浏览器,并以用户 1 身份登录,有 5 个输入集 - 在 IE 中(预期的 5 个图表(和作为用户 2 个,有 20 个输入集 - 在 Chrome 中(预期的 20 个图表(我期待 2 个浏览器窗口,其中一个有 5 个图表,第二个窗口有 20 个图表:

我是python的新手,如果它已经在不同的问题中提出/回答,请道歉

app = Flask(__name__)
plot = None
my_session = None
session_id = None
@app.route('/')
def home():
if not session.get('logged_in'):
return render_template('login.html')
else:
return render_template('template.html')
@app.route('/login', methods=['POST'])
def do_admin_login():
if request.form['password'] == 'password' and request.form['username'] in 'admin' :
session['logged_in'] = True
my_session = Bot(request.form['username'])
my_session.session_id = request.form['username']
session['user'] = request.form['username']
return render_template('template.html')
else:
flash('wrong password!')
return home()
@app.route("/ask", methods=['POST','GET'])
def ask():
string = str(request.form['message'])
res = my_session.process(string)
return jsonify({'status':'OK','answer':bot_res})

class Bot():
#Define user level 
def __init__(self,session_id):
self.return_string = ""
self.session_id = session_id
def process(self, string):
self.session_id = session['user']
self.string = string
self.return_string = self.process_order() #  This method I would like to execute as concurrent at the same time for multiple users/session with different set ot data
return self.return_string
def process_order(self):
self.plot = Plot()
self.plot.global_url = range(5)
self.i = 0
self.inputs = [] #tuples
self.number = range(5)
self.url_values = zip(self.number,self.inputs)
self.pool = Pool()
self.func = partial(self.plot.do_plot,self.var1)
self.pool.map(self.func,self.url_values)
self.pool.close()
self.pool.join()
process_confirmation = "Your request is complete"
return process_confirmation

class Plot():
def __init__(self):
pass
def do_plot(self, var1):
self.number, self.url = plot_values
self.var1 = var1
fig = plt.figure(self.number)
self.line = str(self.url[1])
self.res  = urllib.request.urlopen(self.line)
plt.imshow(plt.imread(self.res))
self.file_name = "%03d.png"%(self.number,)
plt.savefig(self.file_name)
plt.close()
if __name__ == "__main__":
session_id = None
app.secret_key = os.urandom(12)
my_session = Bot(session_id)
app.run(host='0.0.0.0', port=80)

如果您遇到的问题是单个请求需要很长时间,那么您的问题可能源于使用烧瓶内置服务器。

您可以尝试使用 gevent 部署您的应用: http://flask.pocoo.org/docs/1.0/deploying/wsgi-standalone/#gevent

相关内容

  • 没有找到相关文章