我在PythonAnywhere上有一个网站,使用Flask和Flask-SQLAlchemy连接到MySQL数据库。用户可以使用该网站将任务保存到数据库中的记录表中,然后单独的定时任务(Python程序)检查数据库并处理每个未处理的记录。
我遇到的问题是,定时任务的数据库查询似乎只在第一次运行时找到新记录,但如果我使用网站添加新任务,则仍在运行的定时任务的定期数据库查询(每5秒钟)似乎无法检测到新记录。
您有什么想法关于这里可能发生了什么?
以下是由bash文件运行的代码:
我遇到的问题是,定时任务的数据库查询似乎只在第一次运行时找到新记录,但如果我使用网站添加新任务,则仍在运行的定时任务的定期数据库查询(每5秒钟)似乎无法检测到新记录。
您有什么想法关于这里可能发生了什么?
以下是由bash文件运行的代码:
def generate_any_pending_videos():
unfinished_videos = db.session.query(Video)\
.filter(~Video.status.has(VideoStatus.status.in_(['Error', 'Finished', 'Video deleted'])))\
.order_by(Video.datetime_created)\
.all()
for video in unfinished_videos:
try:
logging.info("Attempting to create video for video %d" % video.id)
generate_video(video)
except Exception as e:
logging.error(str(e))
if __name__ == '__main__':
while True:
generate_any_pending_videos()
time.sleep(5)
session.refresh(object)
方法。 - Nathan Wailesgenerate_any_pending_videos
结束时发出session.expire_all()
。这可能不是最优雅的解决方案,但如果它起作用,至少您知道问题所在。 - jorgehdb.session.new
(以及dirty
和deleted
)属性,以检查对 该 会话的任何更改。在您的代码中,db.session
是一个崭新的会话,还是它在哪里被创建? - Jens