RQ - Empty & Delete Queues

≯℡__Kan透↙ 提交于 2019-12-03 07:19:07

问题


I'm using RQ, and I have a failed queue with thousands of items, and another test queue I created a while back for testing which is now empty and unused. I'm wondering how to remove all jobs from the failed queue, and delete the test queue altogether?

Apologies for the basic question, but I can't find info on this in the RQ docs, and I'm completely new to both Redis and RQ... Thanks in advance!


回答1:


Cleanup using rq

RQ offers methods to make any queue empty:

>>> from redis import Redis
>>> from rq import Queue
>>> qfail = Queue("failed", connection=Redis())
>>> qfail.count
8
>>> qfail.empty()
8L
>>> qfail.count
0

You can do the same for test queue, if you have it still present.

Cleanup using rq-dashboard

Install rq-dashboard:

$ pip install rq-dashboard

Start it:

$ rq-dashboard
RQ Dashboard, version 0.3.4
 * Running on http://0.0.0.0:9181/

Open in browser.

Select the queue

Click the red button "Empty"

And you are done.

Python function Purge jobs

If you run too old Redis, which fails on command used by RQ, you still might sucess with deleting jobs by python code:

The code takes a name of a queue, where are job ids.

Usilg LPOP we ask for job ids by one.

Adding prefix (by default "rq:job:") to job id we have a key, where is job stored.

Using DEL on each key we purge our database job by job.

>>> import redis
>>> r = redis.StrictRedis()
>>> qname = "rq:queue:failed"
>>> def purgeq(r, qname):
... while True:
...     jid = r.lpop(qname)
...     if jid is None:
...         break
...     r.delete("rq:job:" + jid)
...     print jid
...
>>> purge(r, qname)
a0be3624-86c1-4dc4-bb2e-2043d2734b7b
3796c312-9b02-4a77-be89-249aa7325c25
ca65f2b8-044c-41b5-b5ac-cefd56699758
896f70a7-9a35-4f6b-b122-a08513022bc5



回答2:


- 2016 -

You can now use rq's empty option form command line:

/path/to/rq empty queue_name

So you can use it to empty any queue not just the failed one




回答3:


Monitoring tool rqinfo can empty failed queue.
Just make sure you have an active virtualenv with rq installed, and run

$ rqinfo --empty-failed-queue

See rqinfo --help for more details.




回答4:


you can just login to redis and clear all queues

to login

user@user:~$ redis-cli

enter this command and hit enter

FLUSHALL

And you're done

Edit: This will delete everything stored in redis



来源:https://stackoverflow.com/questions/24915181/rq-empty-delete-queues

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!