12

如何将作业的结果传递给依赖它的作业?

我目前所做的是将第一份工作的 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

这是推荐的方式吗?有没有其他模式可以用来直接将第一份工作的结果传递给第二份?

4

3 回答 3

14

您可以从作业本身访问有关当前作业及其依赖项的信息。这消除了显式传递第一个作业的 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项。

于 2016-06-08T22:05:56.197 回答
4

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

希望这可以帮助。

于 2015-12-02T18:03:57.467 回答
4

使用 rq 0.13.0,我们可以通过

current_job = get_current_job(redis_conn)
job = current_job.dependency
于 2019-01-23T07:07:34.827 回答