2

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)- そして、これが指定する必要があるかどうか疑問に思っていました. 私がスケジュールしたジョブは、完了するまでに (時々) 1 時間かかることがあります (これはジョブごとに異なります)。

RQ は、実行時間が大幅に変化するようなジョブにまだ適していますか?

どんな提案も素晴らしいでしょう!

4

1 に答える 1

4

スケジュールした各ジョブが、すべて完了したという明確で観察可能な兆候を示している限り、間違いなく RQ を使用して、そのような「兆候」を待つことができます。次に、そのような指示に頼って、各ジョブのresult.

count_words_at_urlあなたが引用した例では、それがいつ終了したかについて明確な指示を与えていないことが明らかに想定されています(の本体while job.result is None:で asleepを使用してループすることで「ポーリング」できますがwhile、それはかなり壊れやすいです-可能な場合はポーリングを避けてください)。

于 2014-12-23T18:27:59.000 に答える