首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芹菜未运行chord回调

芹菜未运行chord回调
EN

Stack Overflow用户
提问于 2013-12-12 22:25:49
回答 3查看 3.7K关注 0票数 4

在看了很多关于chord回调无法执行的文章,并尝试了他们的解决方案后,我仍然无法让它工作。事实上,由于某些原因,chord_unlock方法也无法执行。

celery.py

代码语言:javascript
复制
from __future__ import absolute_import
from celery import Celery

app = Celery('sophie',
             broker='redis://localhost:6379/2',
             backend='redis://localhost:6379/2',
             include=['sophie.lib.chord_test'])

app.conf.update(
    CELERY_ACCEPT_CONTENT=["json"],
    CELERY_TASK_SERIALIZER="json",
    CELERY_TRACK_STARTED=True,
    CELERYD_PREFETCH_MULTIPLIER=1,   # NO PREFETCHING OF TASKS
    BROKER_TRANSPORT_OPTIONS = {
        'priority_steps': [0, 1]     # ALLOW ONLY 2 TASK PRIORITIES
    }
)

if __name__ == '__main__':
    app.start()

chord_test.py

代码语言:javascript
复制
from __future__ import absolute_import
from sophie.celery import app
from celery import chord

@app.task(name='sophie.lib.add')
def add(x, y):
    return x + y

@app.task(name='sophie.lib.tsum')
def tsum(numbers):
    return sum(numbers)

if __name__ == '__main__':
    tasks = [add.s(100, 100), add.s(200, 200)]
    chord(tasks, tsum.s()).apply_async()

我的worker日志文件的输出如下所示

代码语言:javascript
复制
$ celery worker -l info --app=sophie.celery -n worker1.%h

 -------------- celery@worker1.vagrant-ubuntu-11 v3.1.6 (Cipater)
---- **** ----- 
--- * ***  * -- Linux-3.0.0-12-server-x86_64-with-Ubuntu-11.10-oneiric
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> broker:      redis://localhost:6379/2
- ** ---------- .> app:         sophie:0x3554250
- ** ---------- .> concurrency: 1 (prefork)
- *** --- * --- .> events:      OFF (enable -E to monitor this worker)
-- ******* ---- 
--- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery


[tasks]
  . sophie.lib.add
  . sophie.lib.tsum

[2013-12-12 19:37:26,499: INFO/MainProcess] Connected to redis://localhost:6379/2
[2013-12-12 19:37:26,506: INFO/MainProcess] mingle: searching for neighbors
[2013-12-12 19:37:27,512: INFO/MainProcess] mingle: all alone
[2013-12-12 19:37:27,527: WARNING/MainProcess] celery@worker1.vagrant-ubuntu-11 ready.
[2013-12-12 19:37:29,723: INFO/MainProcess] Received task: sophie.lib.add[b7d504c1-217f-43a9-b57e-86f0fcbdbe22]
[2013-12-12 19:37:29,734: INFO/MainProcess] Task sophie.lib.add[b7d504c1-217f-43a9-b57e-86f0fcbdbe22] succeeded in 0.009769904
00522s: 200
[2013-12-12 19:37:29,735: INFO/MainProcess] Received task: sophie.lib.add[eb01a73e-f6c8-401d-8049-6cdbc5f0bd90]
[2013-12-12 19:37:29,737: INFO/MainProcess] Task sophie.lib.add[eb01a73e-f6c8-401d-8049-6cdbc5f0bd90] succeeded in 0.001446505
00442s: 400

根本没有调用任何chord_unlock。一些更多的输出来提供更多的上下文:

代码语言:javascript
复制
$ sudo pip freeze | egrep 'celery|kombu|billiard'
billiard==3.3.0.12
celery==3.1.6
kombu==3.0.7

$ uname -a
Linux vagrant-ubuntu-11 3.0.0-12-server #20-Ubuntu SMP Fri Oct 7 16:36:30 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

$ redis-server --version
Redis server version 2.2.11 (00000000:0)
EN

回答 3

Stack Overflow用户

发布于 2013-12-18 23:43:39

chords documentation使用以下chord语法:

代码语言:javascript
复制
 result = chord(header)(callback)

所以你可以这样做:

代码语言:javascript
复制
 chord(tasks)(tsum.s())
票数 4
EN

Stack Overflow用户

发布于 2016-01-26 16:40:30

在和弦文档下有一个Important Notes部分,它说:

chord中使用的

任务不能忽略其结果。实际上,这意味着您必须启用CELERY_RESULT_BACKEND才能使用和弦。此外,如果在配置中将CELERY_IGNORE_RESULT设置为True,请确保使用ignore_result=False.定义要在chord中使用的各个任务这既适用于Task子类,也适用于修饰任务。

即使我遵循了建议,chord回调也不会执行,但可能会帮助其他人。

编辑:

找到我箱子里的东西了!chord并不是在所有情况下都完全支持指定队列名称:https://github.com/celery/celery/issues/2085

票数 1
EN

Stack Overflow用户

发布于 2022-01-26 17:17:30

当我的任务签名与流提供的an不匹配时发生在我身上,接受*args可能有助于调试这样的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20546120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档