如何使用Celery定期任务运行子任务?

时间:2016-10-17 15:17:41

标签: python celery

我想创建 periodic 任务,它可以查询数据库,从数据提供者处获取数据,发出一些API请求,格式化文档并使用其他API发送它们。

上一个任务的结果应该链接到下一个任务。我从文档中得到了我必须使用和弦才能组织链接。

但是,我从文档中得到了什么:不要从任务中运行子任务,因为它可能是死锁的原因。

所以,问题是:如何在周期性任务中运行子任务?

@app.task(name='envoy_emit_subscription', ignore_result=False)
def emit_subscriptions(frequency):
# resulting queryset is the source for other tasks
    return Subscription.objects.filter(definition__frequency=1).values_list('pk', flat=True)



@app.task(name='envoy_query_data_provider', ignore_result=False)
def query_data_provider(pk):
    # gets the key from the chain and returns received data
    return "data"


@app.task(name='envoy_format_subscription', ignore_result=False)
def format_subscription(data):
    # formats documents
    return "formatted text"


@app.task(name='envoy_send_subscription', ignore_result=False)
def send_subscription(text):
    return send_text_somehow(text)

对不起这个菜鸟问题,但我确实是Celery的菜鸟。

1 个答案:

答案 0 :(得分:0)

这样的事可能吗?

import time

while True:
    my_celery_chord()
    time.sleep(...)