2015-03-02 131 views
7

如何將作業結果傳遞給依賴於作業的作業?將結果傳遞給作業 - python rq

我目前做的是通過第一份工作的ID到第二,

first = queue.enqueue(firstJob) 
second = queue.enqueue(secondJob, first.id, depends_on=first); 

而且裏面secondJob獲取的第一份工作得到結果

first = queue.fetch_job(previous_job_id) 
print first.result 

這是對recomended方式?有沒有其他的模式可以直接將第一份工作的結果傳遞給第二份?

回答

5

您可以從作業本身中獲取有關當前作業及其依賴關係的信息。這否定了明確傳遞第一份工作的ID的必要性。

定義作業:

from rq import Queue, get_current_job 
from redis import StrictRedis 

conn = StrictRedis() 
q = Queue('high', connection=conn) 

def first_job(): 
    return 'result of the first job' 

def second_job(): 
    current_job = get_current_job(conn) 
    first_job_id = current_job.dependencies[0].id 
    first_job_result = q.fetch_job(first_job_id).result 
    assert first_job_result == 'result of the first job' 

排隊作業:

first = queue.enqueue(first_job) 
second = queue.enqueue(second_job, depends_on=first) 

注意,current_job可以有多個依賴關係,以便current_job.dependencies是一個列表。

1

在我自己的設置,我用兩份工作,第二取決於第一的結果。它們在單獨的隊列中運行,並且如果第一個作業獲得了成功的結果,它會在第二個隊列中放置作業,並在創建作業時傳遞必要的數據。它對我來說工作得很好。

希望這會有所幫助。