作业是否有可能让工人让出并将自己放回队列的末尾?
redis 队列中的作业是按顺序处理的,长时间运行的作业可能会占用 cpu。它是否有一种模式来决定它已经消耗了足够的时间并且应该让步给队列中的其他项目?
我注意到requeue_job
在rq
实施中有规定;如果工作“失败”。也许这是一种破解方法?
或者也许有一个可以利用的作业超时?还是这种思维分支只是另一个死胡同?
有一个作业超时参数:
job = q.enqueue(count_words_at_url, 'http://stackoverflow.com', timeout=180)
如果您选择不明确设置,默认超时为 180。
如果作业超时,作业将移至failed
队列。
您可以稍后将失败的作业重新排队:
from redis import Redis
from rq import Queue, get_failed_queue
r = Redis()
failed_queue = get_failed_queue(r)
print failed_queue.count
for job_id in failed_queue.job_ids:
failed_queue.requeue(job_id)