Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在何处放置更新数据库的预定函数,以使其不受干扰?_Python_Flask_Scheduler_Schedule - Fatal编程技术网

Python 在何处放置更新数据库的预定函数,以使其不受干扰?

Python 在何处放置更新数据库的预定函数,以使其不受干扰?,python,flask,scheduler,schedule,Python,Flask,Scheduler,Schedule,我正在使用python中的schedule模块运行一个函数,该函数每5分钟更新一次mysql数据库 数据库更新函数.py def update_aqi(): query = db.select([Aqi.id, Aqi.City]) result = db.engine.execute(query).fetchall() for each_city in result: current_city = each_city[1] current

我正在使用python中的schedule模块运行一个函数,该函数每5分钟更新一次mysql数据库

数据库更新函数.py

def update_aqi():
    query = db.select([Aqi.id, Aqi.City])
    result = db.engine.execute(query).fetchall()
    for each_city in result:
        current_city = each_city[1]
        current_id = each_city[0]
        aqi_response = get_aqi(current_city)
        returned_aqi_data = aqi_response['data']['aqi']
        returned_time = aqi_response['data']['time']['s']

        update_this = Aqi.query.filter_by(id=current_id).first()
        update_this.Aqi = returned_aqi_data
        update_this.time = returned_time
        db.session.commit()

    return "updated time at ...."
以及调度此任务的函数

def dbUpdate():
    schedule.every(5).minutes.do(update_aqi)
    While True:
        schedule.run_pending()
        time.sleep(1)
    pass
我已经尝试在调用我的app.py时运行该函数,但是它必须等待5分钟,然后才能呈现主页

还尝试在下插入dbUpdate()函数

@app.route("/")
def index():
    """Return the homepage."""
    dbUpdate()
    return render_template("index.html")
仍然需要等待,因此我尝试插入我的另一条路线,但这一切都会延迟该路线必须执行的操作。插入的最佳位置是哪里?因此,它只是从后面运行,从不干扰?

1)数据库级别-在MySQL中,您可以创建在定义的时间间隔内运行的
事件。

2) 您可以使用类似的东西,这是一个异步任务队列。

1)数据库级别-在MySQL中,您可以创建在定义的时间间隔内运行的
事件。


2) 您可以使用类似的东西,这是一个异步任务队列。

我已经研究了MySQL事件,但人们一直建议我使用python。如果我创建MySQL事件,它不会在更新时影响我的应用程序的任何部分?它只发生在数据库级别,所以你的应用程序不知道这一点。而且,它将是最快的,因为数据库服务器管理它。但是,如果您喜欢干净的代码,并且希望以一种简单的方式查看所有逻辑,则可以在应用程序中编写它。在我曾经工作过的一家公司,大部分逻辑都在数据库中。在我当前的应用程序中,所有逻辑都在应用程序中定义。所以这两种方法都是可行的。我研究过MySQL事件,但人们一直建议我使用python。如果我创建MySQL事件,它不会在更新时影响我的应用程序的任何部分?它只发生在数据库级别,所以你的应用程序不知道这一点。而且,它将是最快的,因为数据库服务器管理它。但是,如果您喜欢干净的代码,并且希望以一种简单的方式查看所有逻辑,则可以在应用程序中编写它。在我曾经工作过的一家公司,大部分逻辑都在数据库中。在我当前的应用程序中,所有逻辑都在应用程序中定义。因此,这两种方法都是可行的。