我需要有一个充当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
不是线程安全的,但是在这种情况下是否稳定?并假设用户确实必须修改图形,那么如果实现锁,它仍然稳定吗?