如何将作业结果传递给依赖它的作业?
我目前所做的是将第一份工作的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
这是推荐的方式吗?有没有其他模式可以用来直接将第一个作业的结果传递给第二个?
答案 0 :(得分:8)
您可以从作业本身访问有关当前作业及其依赖关系的信息。这样就无需显式传递第一个作业的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 :(得分:2)
在我自己的设置中,我使用两个作业,第二个取决于第一个作业的结果。它们在不同的队列上运行,如果第一个作业获得成功结果,它会在第二个作业队列中放置一个作业,在创建作业时传递必要的数据。它对我来说效果很好。
希望这有帮助。
答案 2 :(得分:1)
使用rq 0.13.0,我们可以通过以下方式获取父级工作
current_job = get_current_job(redis_conn)
job = current_job.dependency