在Celery中调用子任务哪种方式更好?组,延迟每个项目,或使用回调?

时间:2017-06-30 08:11:37

标签: python celery yield

python 3.5 芹菜4.0.2 RabbitMq 3.6.10

我正在努力攀登一些数据,但我不知道哪种方式更合适。

像表一样的数据结构,我需要为每一行推送子任务。

这是我用过的东西

  • 延迟每个项目:

    @app.task
    def task():
        for row in table:
            subtask.delay(row)
    
    @app.task
    def subtask(item):
        dosomething(item)
    
  • 使用群组

    @app.task
    def task():
        rows=[]
        for row in table:
            rows.append(row)
        group(subtask.s(row) for row in rows)()
    
    @app.task
    def subtask(item):
        dosomething(item)
    
  • 使用group和yield

    def _task():
        for row in table:
            yield subtask(row).s()
    
    @app.task
    def task():
        group(_task())()
    
    @app.task
    def subtask(item):
        dosomething(item)
    

这只是我的问题的演示,我已经对这些代码进行了一些测试。第三种方式看起来更好。

您选择哪种方式?

有什么建议吗?

0 个答案:

没有答案