データベースから単一のレコード(行)を取得する必要があるセロリワーカーがたくさんあります。
「last_used」フィールドから 60 秒が経過した場合にのみ返され、返されるとすぐに「last_used」を現在の時刻で更新する必要があります (したがって、0 の遅延で無制限の再試行を行う他のワーカーは同じものを取得しません)。
これをすべて db レベルで行うことは可能ですか? この「last_used」フィールドを更新する他のソースはありません。
単列はこんな感じ。
{"id": "..." "last_used": "2016-06-31 00:37:21.241833", "item": "string"}
私は試した:
conn = r.connect(host='localhost', port=28015)
do = r.db('database').table('tb').order_by(index=("last_used")).limit(1).update(
{'last_used': r.now()}
, return_changes=True).run(conn)
それは機能しません。変更される前に、複数のワーカーが同じ行を返します。