Python Celery子任务组未执行

时间:2016-08-03 14:19:42

标签: python celery

我正在尝试使用Celery来处理后台任务。我目前有以下设置:

@app.task
def test_subtask(id):
    print('test_st:', id)


@app.task
def test_maintask():
    print('test_maintask')
    g = group(test_subtask.s(id) for id in range(10))
    g.delay()

test_maintask计划执行每个 n 秒,这有效(我看到打印语句出现在我启动worker的命令行窗口中)。我想要做的是让这个计划任务产生一系列子任务,我在这里使用group()分组。

然而,似乎没有任何test_subtask任务正在被执行。我究竟做错了什么?我对这些子任务没有任何时序/结果限制,只是希望它们从现在起一段时间内发生,异步,没有特定的顺序。 n 秒后,test_maintask将再次触发(并再次),但没有任何子任务执行。

我正在使用一名工作人员,一个节拍和AMQP作为经纪人(在另一台机器上)。

编辑:对于它的价值,问题似乎完全是因为一个任务调用另一个(而不是因为正在安排的主要任务)。如果我手动调用主要任务:

celery_funcs.test_maintask.delay()

我看到主要任务的打印语句但是 - 再次 - 不是子任务。直接调用子任务确实有效:

celery_funcs.test_subtask.delay(10)

1 个答案:

答案 0 :(得分:0)

叹息......刚刚找到答案,我使用以下内容配置我的Celery应用程序:

app = Celery('celery_app', broker='<my_broker_here>')

奇怪的是,这并没有被任务本身所取代......也就是说,

print('test_maintask using broker', app.conf.BROKER_URL, current_app.conf.BROKER_URL)

分别返回'<my_broker_here>'None,导致该组被发送到某个默认代理(我猜?)。

BROKER_URL添加到app.conf.update可以解决问题,尽管我还不完全清楚Celery在内部发生的事情......