【问题标题】:How to run chain of chord successfully in celery?如何在芹菜中成功运行和弦链?
【发布时间】:2018-11-14 11:46:50
【问题描述】:

我在我的系统中成功使用了和弦。但是,现在我有一个案例,我必须按顺序运行和弦数(第二个在第一个结束时开始)。所以,我试图使用和弦链。但这对我不起作用。

@app.task(bind=True)
def some_celery_beat_worker(self):
    feed_chain = []
    for feed in feed_list:
        celery_task_list = [perform single_task.si(url)
                                for url in some_url_list]
        per_feed_chord = chord(celery_task_list, chord_callback.si(feed['_id'], feed['xml_file_name']))
        feed_chain.append(per_feed_chord)
    chain(*feed_chain).delay()

将此作为回溯:

回溯(最近一次通话最后): 文件“python3.4/site-packages/celery/app/trace.py”,第 374 行,在 trace_task R = retval = fun(*args, **kwargs) __protected_call__ 中的文件“python3.4/site-packages/celery/app/trace.py”,第 629 行 返回 self.run(*args, **kwargs) 文件“workers.py”,第 156 行,在 joblist_updater_worker 链(*feed_chain).延迟() 文件“python3.4/site-packages/celery/canvas.py”,第 182 行,延迟 返回 self.apply_async(partial_args, partial_kwargs) 文件“/python3.4/site-packages/celery/canvas.py”,第 566 行,在 apply_async dict(self.options, **options) if options else self.options)) 运行中的文件“python3.4/site-packages/celery/canvas.py”,第 596 行 first_task.apply_async(**options) 文件“python3.4/site-packages/celery/canvas.py”,第 1241 行,在 apply_async return (self.tasks[0] | body).set(task_id=task_id).apply_async( 关键错误:0

我需要修复这个特定的工作流程,或者任何可以解决这个特定问题的替代工作流程(一个接一个地运行和弦数)

【问题讨论】:

    标签: python celery


    【解决方案1】:

    问题在于我如何形成chain。这是不正确的(至少对于我的芹菜版本),尽管在很多地方都提出了建议。

    适合我的方法。

    feed_chain = chain()
    for feed in feed_list:
        feed_chain |= chord(args)
    
    feed_chain.delay()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 2014-02-19
      • 2014-08-17
      • 2018-12-07
      • 2019-02-14
      • 2020-05-19
      • 2021-08-21
      相关资源
      最近更新 更多