返回的数组引用相同的内存点,但返回不同的值

时间:2019-07-16 17:24:36

标签: flask jinja2 python-3.7

我正在建立一个基本的动态网页来显示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'。打印语句表明,写入吸气剂和从吸气剂获取的数组处于相同的存储空间,但是一个为空,另一个具有数据。谁能帮助我理解这一点?

1 个答案:

答案 0 :(得分:0)

所以我知道了。当在flask中的进程中调用对象方法时,python创建对象的副本,然后区分两个副本,即使它们确实占用相同的内存空间。我需要通过重新排队(https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xxii-background-jobs)添加后端队列,以便可以在不中断flask的路由的情况下异步调用后端。