MySQLデータベースに接続されたFlaskとFlask-SQLAlchemyを使用するPythonAnywhereのWebサイトがあります。ユーザーはWebサイトを使用して、データベースに保存されているタスクをテーブルのレコードとしてキューに入れることができます。その後、別のスケジュールされたタスク(Pythonプログラム)がデータベースをチェックし、未処理のすべてのレコードを処理します。
私が直面している問題は、スケジュールされたタスクのdbクエリが初めて実行されたときにのみ新しいレコードを見つけるように見えることですが、その後Webサイトを使用して新しいタスクを追加すると、まだ実行されているスケジュールされたタスクの定期的なdbクエリ( 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)
修正が見つかりました:何らかの理由でdb.session.commit()
、クエリによって新しいレコードが表示される前に実行されていました。
if __name__ == '__main__':
while True:
generate_any_pending_videos()
time.sleep(5)
db.session.commit() # For some reason this is needed to be able to detect newly-created videos
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加