只读全局变量是否可以接受?

时间:2020-03-18 09:28:56

标签: python flask

我需要有一个充当API的网络服务器。每隔5分钟,我就会从远程位置解析一个300MB的巨大文件,并构建一个包含许多Python对象的大型图形。 API需要在图形上运行算法。由于图的性质和算法极其复杂,因此我不希望使用SQL来存储和查询数据。由于文件很大,因此无法在每次API调用时解析文件。

我求助于全局变量的主要原因是因为构建图形需要大量时间。如果使用数据库,则仍然必须为每个API请求构建图形。如果该图始终可用,则将大大缩短时间。是的,这是一个非常规的项目。

目前这是我到目前为止所拥有的;我将Thread子类化,并使其更新其成员(即图形)。像这样:

from flask import Flask, render_template
from threading import Thread
import time

app = Flask(__name__,
            static_folder="./dist/static",
            template_folder="./dist")

class AutoUpdater(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True
        self.graph = None
        self.start()

    def run(self):
        while True:
            # Build the graph and update self.graph
            time.sleep(5 * 60)

A = AutoUpdater()

@app.route('/')
def hello_world():
    # Run algorithms with A.graph

A.graph永远不会被用户修改,除非由我运行的计划任务执行;用户仅查询不修改图形的图形算法。我知道A不是线程安全的,但是在这种情况下是否稳定?并假设用户确实必须修改图形,那么如果实现锁,它仍然稳定吗?

0 个答案:

没有答案