2017-08-14 48 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--我很感激。 –

相關問題