芹菜和丢失的消息

时间:2015-07-19 16:18:44

标签: redis rabbitmq celery django-celery

以下代码片段启动我在Celery安装中启动的任务:

tasks.py

@app.task(ignore_result=False)
def asyncTransactionTask(txid):
    Here I do something with txid and do not schedule additional tasks

@app.task(ignore_result=True)
def asyncCheckNotifications(*args):

    try:
        payments = # get an array of values
        payments_tasks = []
        for payment in payments:
            payments_tasks.append(asyncTransactionTask.s(payment))

        chain(group(payments_tasks) | asyncCheckNotifications.subtask()).apply_async(countdown=60)
    except Exception as e:
        logger.error(str(e))
        asyncCheckNotifications.apply_async(countdown=10)
        raise e

asyncCheckNotifications.delay()

我希望看到asyncCheckNotifications方法大致每分钟运行一次,而我每隔两次分钟就会收到它。

更重要的是,如果我检查计划任务(celery -A myapp inspect scheduled),我会看到方法执行得到了适当的安排,但是当我达到超时时,它会被另一个时间表替换为下一分钟,没有什么是运行

我正在使用Celery 3.1.8。 消息代理是RabbitMQ 3.2.4。

1 个答案:

答案 0 :(得分:0)

与此同时,我通过更换以下内容解决了我的问题:

chain(group(payments_tasks) | asyncCheckNotifications.subtask()).apply_async(countdown=60)

以下内容:

    chain(group(payments_tasks) | asyncCheckNotifications.subtask(countdown=60)).delay()