我正在玩celery教程的演示案例.但是,当我启动任务应用程序时,结果显示为禁用.如下.任何的想法?
celery --app=plmtcheck worker -l info
Then I see:
- ** ---------- .> app: plmtcheck:0x7f9fd2fdf160
- ** ---------- .> transport: amqp://guest@localhost:5672//
- ** ---------- .> results: disabled
I have seen the result is ready.
[2014-05-05 16:16:55,382: INFO/MainProcess] Connected to amqp://guest@127.0.0.1:5672//
[2014-05-05 16:16:55,389: INFO/MainProcess] mingle: searching for neighbors
[2014-05-05 16:16:56,401: INFO/MainProcess] mingle: all alone
[2014-05-05 16:16:56,422: WARNING/MainProcess] celery@D-NYC-00552088-Linux ready.
[2014-05-05 16:17:27,726: INFO/MainProcess] Received task: plmtcheck.add[7ea5a501-1085-48b7-8f7e-dac8ac2c5377]
[2014-05-05 16:17:27,759: INFO/MainProcess] Task plmtcheck.add[7ea5a501-1085-48b7-8f7e-dac8ac2c5377] succeeded in 0.032166894000056345s: 37
Run Code Online (Sandbox Code Playgroud)
我的代码很简单
from celery import Celery
app = …Run Code Online (Sandbox Code Playgroud) 我正在使用 Python3 和 celery 处理可并行的任务。我喜欢将其分成几个块,这样就可以节省网络通信的成本。但是,celery 文档没有透露有关如何调用结果块的足够详细信息。尝试了不同的方法,但它们并没有像我预期的那样工作。我的代码段如下:
@app.task(name='pl.startregret')
def startregret(**kwargs):
items = list(zip(range(1000), range(1000)))
chunk = regretclick.chunks(items, 10)
print(chunk)
for c in chunk:
print(c)
@app.task(name='pl.regretclick')
def regretclick(x,y):
print('got it.')
return x + y
Run Code Online (Sandbox Code Playgroud)
我读了一些代码,认为我的代码中的块应该是一个生成器。然而,打印输出显示
[2014-10-15 13:12:15,930: WARNING/Worker-2] args
[2014-10-15 13:12:15,931: WARNING/Worker-2] subtask_type
[2014-10-15 13:12:15,931: WARNING/Worker-2] kwargs
[2014-10-15 13:12:15,931: WARNING/Worker-2] immutable
[2014-10-15 13:12:15,931: WARNING/Worker-2] options
[2014-10-15 13:12:15,931: WARNING/Worker-2] task
Run Code Online (Sandbox Code Playgroud)
关于调用块的正确方法有什么建议吗?
谢谢,
更新:我已阅读源代码并尝试了 chunk()。看起来现在唯一的问题是使用默认队列而不是 celeryconfig 中定义的队列。