取消Python RQ中已执行的任务?

Cha*_*her 5 python heroku redis python-rq

我正在使用http://python-rq.org/在Heroku worker dynos上排队和执行任务.这些是长时间运行的任务,偶尔我需要在执行中期取消它们.我怎么用Python做到这一点?

from redis import Redis
from rq import Queue
from my_module import count_words_at_url

q = Queue(connection=Redis())
result = q.enqueue(
             count_words_at_url, 'http://nvie.com')
Run Code Online (Sandbox Code Playgroud)

后来我想做一个单独的过程:

from redis import Redis
from rq import Queue
from my_module import count_words_at_url

q = Queue(connection=Redis())
result = q.revoke_all() # or something
Run Code Online (Sandbox Code Playgroud)

谢谢!

Joh*_*Mee 10

如果您手头有工作实例

job.cancel()
Run Code Online (Sandbox Code Playgroud)

或者,如果您可以确定哈希值:

from rq import cancel_job
cancel_job('2eafc1e6-48c2-464b-a0ff-88fd199d039c')
Run Code Online (Sandbox Code Playgroud)

http://python-rq.org/contrib/

但这只是将它从队列中删除;我不知道如果已经执行它会杀死它。

您可以让它记录挂墙时间,然后定期检查自身并在一段时间后引发异常/自毁。

对于手动、特别风格、死亡:如果你已经redis-cli安装,你可以做一些激烈的事情,比如冲洗队列和作业:

$ redis-cli
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> exit
Run Code Online (Sandbox Code Playgroud)

我仍在挖掘文档以尝试找到如何进行精确杀死。

不确定这是否对任何人有帮助,因为这个问题已经 18 个月大了。