1
mariadbの "tasks"テーブルを使ってPythonスクリプトを並列化しようとしています。各行はタスクを記述しています。簡略化されたpython + peeweeコード:mariadbでselect + update transactionをアトミックに実行できない
with db.transaction() as txn:
result = list(Table.raw("select id from tasks where started=0 limit 1"))
if len(result) == 0:
sys.exit("nothing left to do")
my_next_task = result[0]
# mark this task as started
Table.raw("update tasks set started=1 where id=%s" % my_next_task.id)
# process my_next_task
ただし、私は同時に2つのインスタンスを起動すると、同じタスクを開始します。この場合、トランザクションがどのように動作すると誤解されていますか?
ありがとうございます!それはうまくいくはずです(しかし、私はあなたが= 0を開始したのではなく0を開始したと思っています) – user3911479
私はトランザクションを誤解する必要があります。トランザクション内の複数のクエリをグループ化しても、1つのアトミック操作として実行される(またはそうでない場合はロールバックされる)ことが保証されますか? – user3911479
はい、開始= 0を意味しました – Rahul