処理が必要な一連のファイルをリストする InnoDB テーブルがあります。
処理を処理する python スクリプトは、基本的にこれを行います。
- status = 'unprocessed' の次のファイルを取得する
- ステータスを「処理中」に設定します
- C++ スクリプトを呼び出してそのファイルを処理する
- 「処理済み」とマークする
- 終わり
この python スクリプトは複数回呼び出されるため、ステップ 1 と 2 でプロセス B がプロセス A と同じ行を db から取得してから、プロセス A がステップ 2 の状態。
SQL を実行するときにインタープリターが GIL を解放するので、Python GIL はここでは役に立たないと思います (そうですか?)。そして、私が読んでいることから、InnoDBでテーブルロックを行うことは機能しません。行レベルのロックは、ここで問題を処理しますか? そうでない場合、他にどのような選択肢がありますか?
「from threading import Lock」を実行して追加できますか
with lock:
update_file_status(file_id, "processing")
?