我希望使用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是否仍然适合这类工作 - 执行时间差别很大?
任何建议都会很棒!
答案 0 :(得分:4)
只要您安排的每项工作都给出了一些明确的,可观察到的指示,表明它已全部完成,您绝对可以使用RQ并等待这样的“指示”;那么你将依靠这些指示能够告诉你何时访问每个工作的result
。
在你引用的例子中,显然假设count_words_at_url
没有明确指示它何时结束(你可以通过while job.result is None:
上的sleep
循环来“轮询”{ {1}}的身体,但那很脆弱 - 尽可能避免轮询。