我希望使用 RQ 运行排队作业,但请查看以下示例:
from rq import Queue
from redis import Redis
from somewhere import count_words_at_url
# Tell RQ what Redis connection to use
redis_conn = Redis()
q = Queue(connection=redis_conn) # no args implies the default queue
# Delay execution of count_words_at_url('http://nvie.com')
job = q.enqueue(count_words_at_url, 'http://nvie.com')
print job.result # => None
# Now, wait a while, until the worker is finished
time.sleep(2)
print job.result # => 889
我看到time.sleep(2)
- 我想知道这是否是强制性的。我安排的工作可能需要(有时)一个小时才能完成(这因作业而异)。
RQ 是否仍然适合执行时间差异很大的此类作业?
任何建议都会很棒!
只要你安排的每个作业都给出了一些明确的、可观察的指示,表明它已经完成,你绝对可以使用 RQ 并等待这样的"指示";然后你将依靠这些指示来判断何时访问每个作业的result
。
在你引用的例子中,显然假设count_words_at_url
没有明确指示它何时完成(你可以通过在while
体内用sleep
循环while job.result is None:
来"轮询",但这非常脆弱 - 尽可能避免轮询)。