Python 在何处放置更新数据库的预定函数,以使其不受干扰?
我正在使用python中的schedule模块运行一个函数,该函数每5分钟更新一次mysql数据库 数据库更新函数.pyPython 在何处放置更新数据库的预定函数,以使其不受干扰?,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
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事件,它不会在更新时影响我的应用程序的任何部分?它只发生在数据库级别,所以你的应用程序不知道这一点。而且,它将是最快的,因为数据库服务器管理它。但是,如果您喜欢干净的代码,并且希望以一种简单的方式查看所有逻辑,则可以在应用程序中编写它。在我曾经工作过的一家公司,大部分逻辑都在数据库中。在我当前的应用程序中,所有逻辑都在应用程序中定义。因此,这两种方法都是可行的。