繁体   English   中英

如何在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM