将结果传递给依赖于job - python rq

Aru*_*ath 11 python python-rq

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

我目前所做的是将第一份工作的ID传递给第二份工作,

first = queue.enqueue(firstJob)
second = queue.enqueue(secondJob, first.id, depends_on=first);
Run Code Online (Sandbox Code Playgroud)

并在内部secondJob获取第一份工作以获得结果

first = queue.fetch_job(previous_job_id)
print first.result
Run Code Online (Sandbox Code Playgroud)

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

chi*_*aku 9

您可以从作业本身访问有关当前作业及其依赖关系的信息.这消除了显式传递第一个作业的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'
Run Code Online (Sandbox Code Playgroud)

排队你的工作:

first = queue.enqueue(first_job)
second = queue.enqueue(second_job, depends_on=first)
Run Code Online (Sandbox Code Playgroud)

请注意,它current_job可以有多个依赖项,因此current_job.dependencies是一个列表.

  • 我认为工作不能有多个依赖关系。该功能从未合并。 (2认同)