我正在建立一个基本的动态网页来显示EC2实例数据,我需要检查并传递内部包含数据的数组以使用D3显示。我正在使用多进程在后台运行集合。
运行python3.7和最新版本的Flask。
app.py代码
@app.route('/experiment')
def experiment():
type = request.args.get('type')
resource = request.args.get('resource')
action = request.args.get('action')
if 'test' not in session:
thread = multiprocessing.Process(target=exp.transmitTest)
session['test'] = 'started'
thread.start()
print(f"Looking for Data at {hex(id(exp.getData()))} found {exp.getData()}")
return render_template('experiment.html', data=exp.getData(), type=request.args.get('type'), resource=request.args.get('resource'), action=request.args.get('action'))
后端代码
def transmitTest(self):
for i in range(5):
self.data.append(random.randint(0,100))
time.sleep(4)
print(f"Data: {self.data} at {hex(id(self.data))}")
def getData(self):
return self.data
我的JS调度程序每5秒运行一次'/ experiment'。打印语句表明,写入吸气剂和从吸气剂获取的数组处于相同的存储空间,但是一个为空,另一个具有数据。谁能帮助我理解这一点?
答案 0 :(得分:0)
所以我知道了。当在flask中的进程中调用对象方法时,python创建对象的副本,然后区分两个副本,即使它们确实占用相同的内存空间。我需要通过重新排队(https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xxii-background-jobs)添加后端队列,以便可以在不中断flask的路由的情况下异步调用后端。