2013-08-07 17 views
5

私は尋ねると少し愚かだと感じますが、それはdocumentation for RQのようには見えません。私はそれに何千もの項目を含む「失敗した」キューを持っており、私はDjango管理インターフェースを使ってそれをクリアしたい。管理インターフェースはそれらをリストし、それらを個別に削除して再キューすることができますが、私はジャンゴシェルにダイブする必要があるとは信じられません。Django RQジョブをキューからクリアするには?

私は何が欠けていますか?

答えて

2

redis-cliはFLUSHDBを許可しています。ローカル環境では、私はbizzallionジョブを生成します。

Djangoを統合して、私は更新します。ちょうど$ 0.02を追加する。唯一のRedisで失敗したリストのキーではなく、仕事のキー自体をクリア

import django_rq 
q = django_rq.get_failed_queue() 
q.empty() 

しかし、私のテストでは、ということ:

+0

これは、失敗していないジョブに影響しませんか? – Joe

+0

flushdbを呼び出した後、私のdjangoとredisサーバーを再起動すると、既存のジョブがキューにジャンプする理由は何ですか? – andyzinsser

+0

@Joeは一般的です。現在のジョブは消えます。 –

13

Queueクラスは次のようにアクセスすることができempty()方法があります。あなたの何千もの仕事はまだRedisの記憶を占めています。起こってから、あなたが個別のジョブを削除しなければならないことを防ぐために:

import django_rq 
q = django_rq.get_failed_queue() 
while True: 
    job = q.dequeue() 
    if not job: 
     break 
    job.delete() # Will delete key from Redis 

をadminインタフェースでのボタンを持つためとして、あなたはadmin/base_site.htmlを拡張django-rq/templates/django-rq/jobs.htmlテンプレートを変更する必要があるだろう、と与えていないようですカスタマイズのための部屋。

+0

その2番目のスニペットは巨大なので、それまでは残っているキーでメモリリークが発生した理由を理解できませんでした。私が持っていたようなジョブをすでにデキューしている人は、python-rqで鍵にアクセスできなくなりますので、conn = redis.from_url(redis_url)を使用してください。 conn.keys()メソッドを使用して削除の対象に戻します。 –

+0

@CharlesOffenbacher上記のスニペットを理解しているかどうかはわかりません。上の両方のコードスニペットを実行する必要があると言っていますが、最初に2番目のスニペットを実行し、2番目のスニペットを2番目に実行します。ありがとう。 – William

+0

@Robert私はあなたが2番目のスニペットを使うべきだと考えます。最初のコードスニペットは、実際に失敗したジョブそのものではなく、失敗したジョブを追跡するリストだけをクリアします。 –

関連する問題