2017-08-14 61 views
1

我使用python-rq来管理基于Redis的作业,并且想确定我的工作人员当前正在处理哪些作业。从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

看着一些源代码,我想这一点,你需要什么:

enter image description here

还有一个你应该注意的事情:正在运行的作业的数量等于RQ工人的数量。因为员工一次只能处理一项工作。

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

非常感谢你,gushitong--我很感激。 –