2017-08-14 5 views
1

私はRedisベースのジョブを管理するためにpython-rqを使用していますが、私のワーカーが現在処理しているジョブを特定したいと考えています。python-rqからすべての現在のジョブを取得します

のpython-RQは、接続のための「現在のジョブ」を見つけるために、get_current_job機能を提供していますが、:

  1. 私はこの作業を取得し、
  2. することはできません私は本当にすべてのリストが欲しいです現在キューからの仕事ではなく、この接続のためにすべて労働者がすべてのキューを処理されているジョブの。ここで

は(常にNoneを返します)私のコードです:

from rq import Queue, get_current_job 
redis_url = os.getenv('REDIS_FOO') 
parse.uses_netloc.append('redis') 
url = parse.urlparse(redis_url) 
conn = Redis(host=url.hostname, port=url.port, db=0, password=url.password) 
q = Queue(connection=conn) 
get_current_job(connection=conn) 

誰でも取得する方法上の任意のアイデア、上記のコードを取得するには、もっと重要なのは、仕事だけにしてくださいを持っていますこの接続のすべてのキューにあるすべてのワーカーからの現在のすべてのジョブのリスト

答えて

3

は、いくつかのソースコードに見て、私はあなたが必要なもの、これを理解する:実行中のジョブの数がRQ労働者の数に等しい:

enter image description here

あなたは気付くはずもう一つのことがあります。ワーカーは一度に1つのジョブのみを処理するためです。

from rq import Queue 
from redis import Redis 
from rq.registry import StartedJobRegistry 

from jobs import count_words_at_url 


redis_conn = Redis() 
q = Queue('default', connection=redis_conn) 

for i in range(5000): 
    job = q.enqueue(count_words_at_url, 'http://nvie.com', ttl=43) 

registry = StartedJobRegistry('default', connection=redis_conn) 

running_job_ids = registry.get_job_ids() # Jobs which are exactly running. 
expired_job_ids = registry.get_expired_job_ids() 
+0

ご返信ありがとうございます。しかし、私が間違っていない限り、q.job_idsとq.jobsの両方は、ステータスが「開始」(これは私の後ろ)のジョブではなく、「キューに入れられた」ステータスを持つジョブだけを返します...? –

+0

@AndrewMackieが更新されました。 – gushitong

+0

グシトンに感謝しています。ありがとうございます。 –

関連する問題