![](/img/trans.png)
[英]Is there a way to run a function in the background of a python flask app?
[英]How to run a function in the background of flask app
我在烧瓶中有一个 Web 应用程序路由。 该路线应该在 30 分钟后为用户提供对其数据的分析。 为此,他们启动了路线。 这会触发一个获取初始数据的 API 请求。 然后该路由休眠 30 分钟,然后触发相同的确切 API 响应。 从最终数据中减去初始数据,得到在这 30 分钟内“获得”的数据,并被更新插入数据库。 下面是它的外观示例。 我希望我的用户能够使用网站的其他功能,或者更重要的是,甚至可以在运行时启动此功能的另一个实例。 我的问题是:这是异步问题还是多线程问题,为什么? 我想指出,我的问题比实际代码更具概念性。
@app.route("/data/", methods=['GET', 'POST', 'UPDATE'])
@login_required
def data():
Url = "https://data-api.com"
payload={}
headers = {
'Authorization': AUTH
}
response = requests.request("GET", Url, headers=headers, data=payload)
data_json = json.loads(response.text)
data1_init = data_json["a"]["b"]["c"]
data2_init = data_json["e"]["f"]["g"]
data3_init = data_json["h"]["i"]["j"]
sleep(1800)
Url = "https://data-api.com"
payload={}
headers = {
'Authorization': AUTH
}
response = requests.request("GET", Url, headers=headers, data=payload)
data_json = json.loads(response.text)
data1_final = data_json["a"]["b"]["c"]
data2_final = data_json["e"]["f"]["g"]
data3_final = data_json["h"]["i"]["j"]
data1 = data1_final - data1_initial
data2 = data2_final - data2_initial
data3 = data3_final - data3_initial
data_info = DBModel(data1=data1, data2=data2, data3=data3)
db.session.commit()
return render_template('loading.html')
def run_func():
data = { 'some': 'data', 'any': 'data' }
thr = Thread(target= *your_function*, args=[app, data])
thr.start()
return thr
您可以使用线程。 将您的函数名称放在“your_function”的位置,在 args 中传递函数参数,然后就可以了。 只需在要执行的任何地方调用 run_func() ,它就会开始在另一个线程的后台运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.