python rq作业队列 - time.sleep()

时间:2014-12-23 18:23:48

标签: python python-rq

我希望使用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是否仍然适合这类工作 - 执行时间差别很大?

任何建议都会很棒!

1 个答案:

答案 0 :(得分:4)

只要您安排的每项工作都给出了一些明确的,可观察到的指示,表明它已全部完成,您绝对可以使用RQ并等待这样的“指示”;那么你将依靠这些指示能够告诉你何时访问每个工作的result

在你引用的例子中,显然假设count_words_at_url没有明确指示它何时结束(你可以通过while job.result is None:上的sleep循环来“轮询”{ {1}}的身体,但那很脆弱 - 尽可能避免轮询。