SQLALchemy 0.7.8、Flask-SQLAlchemy 0.16、MySQL 5.5を使用すると、次の問題が発生します。
サーバーAで実行されているcronスクリプトがあり、特定のステータスに一致するすべての行のIDをテーブルTに照会し、それらのIDをブローカーに送信します。ブローカーはそれを他の多くのマシンのワーカーに配布します。
ワーカーはIDを取得し、そのテーブルTと他のいくつかのテーブルにデータを照会し、テーブルを更新してそのIDを処理済みとしてマークし、トランザクションをコミットして、RESTAPIを介してサーバーXに送信します。
そのサーバーXはジョブを完了すると、結果を別のサーバーYの別のREST APIのコールバックに送信します。サーバーYは処理を実行し、結果をテーブルTに保存します。それをコミットした後、IDを別のサーバーに送信します。ワーカー。最初のステップで取得したのと同じである可能性があり、そのワーカーは他のデータを取得して別のサービスに送り返すことになっていますが、このステップでは更新を行いません。
問題は、この最後のステップで、ワーカーがコールバックを介してサーバーYによって更新されたデータを取得せず、その更新前からデータを取得することです。
ワーカーが最初にサーバーXにデータを送信するために使用したセッションにまだいると思いましたが、サーバーYがコールバックされたときに、ワーカーが次にデータをクエリするときにコミットまたはロールバックが発生しなかったため、更新されません。
この場合の適切な解決策は何ですか?これまでのところ、ワーカーがデータをクエリする前に、タスクの最初にsession.commit()を呼び出してみましたが、機能しているように見えますが、それについてはよくわかりません。