2015-03-02 119 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

在我自己的设置,我用两份工作,第二取决于第一的结果。它们在单独的队列中运行,并且如果第一个作业获得了成功的结果,它会在第二个队列中放置作业,并在创建作业时传递必要的数据。它对我来说工作得很好。

希望这会有所帮助。