【问题标题】:Passing results to depending on job - python rq将结果传递给取决于工作 - python rq
【发布时间】:2019-01-23 15:07:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: python python-rq


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      使用 rq 0.13.0,我们可以通过

      current_job = get_current_job(redis_conn)
      job = current_job.dependency
      

      【讨论】:

        猜你喜欢
        • 2016-01-30
        • 2012-08-23
        • 2016-07-22
        • 2016-11-08
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 1970-01-01
        • 2014-03-05
        相关资源
        最近更新 更多