我正在设置RPI3来控制/测量外部电子设备。它使用Apache2服务器和运行Flask的mod_wsgi。控件的所有代码都在一个名为 Timer 的单独类中,该类在__init__.py Flask脚本中初始化。控件的主循环位于不同的线程上。
无法在文档中找到此功能,但从体验看,只要服务器稀疏地获取请求,服务器就会在相同的__init__.py上运行。如果脚本在新请求到来时忙,则服务器在单独的线程上启动新的请求。发生这种情况时, Timer 类的原始实例“在内存中丢失”,因为从那里处理请求的当前脚本不知道它。
我的解决方案很长一段时间将有关正在运行的对象的所有信息写入json文件,并设置了 Timer 类和__init__.py来读取/写入它。在我看来,这有点狡猾。当然这已经解决了。
所以我想做这两件事中的任何一件:
这些可能吗?
这是简化的代码。
from flask import Flask, render_template, request
import time
import threading
class Timer:
def __init__(self):
#setup variables
pass
def mainloop(self):
while True:
data = readSensor()
writeFile(data)
time.sleep(5)
app = Flask(__name__)
t = Timer()
@app.route('/', methods=['GET', 'POST'])
def homepage():
if request.method == 'POST':
return render_template("main.html")
elif request.method == 'GET':
return render_template("main.html")
@app.route('/_submit')
def submit():
t = threading.Thread(target=t.mainloop)
t.start
if __name__ == "__main__":
app.run()