3

処理が必要な一連のファイルをリストする InnoDB テーブルがあります。

処理を処理する python スクリプトは、基本的にこれを行います。

  1. status = 'unprocessed' の次のファイルを取得する
  2. ステータスを「処理中」に設定します
  3. C++ スクリプトを呼び出してそのファイルを処理する
  4. 「処理済み」とマークする
  5. 終わり

この 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")

?

4

1 に答える 1

3

useSELECT FOR UPDATEステートメント - これは、行の排他ロックを取得SELECT FOR UPDATEし、同じ行で他のものを許可しません。

于 2013-05-29T12:37:42.653 に答える