首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用celery.task.chunks的正确方法是什么?

调用celery.task.chunks的正确方法是什么?
EN

Stack Overflow用户
提问于 2014-10-15 17:23:36
回答 1查看 7.1K关注 0票数 4

我正在用Python3和芹菜做一个并行的任务。我喜欢把它分成几块,这样就可以节省通过网络进行通信的费用。然而,芹菜文档没有提供足够的细节,说明如何将结果块称为块。尝试了不同的方法,但它们并不像我预期的那样起作用。我的代码段如下:

代码语言:javascript
复制
@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

我读了一些代码,并认为我的代码块应该是一个生成器。然而,打印输出显示

代码语言:javascript
复制
[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

有什么正确的方法来称呼这些小块吗?

谢谢,

更新:我已经阅读了源代码,并尝试了语块()。现在唯一的问题是使用默认队列而不是在celeryconfig中定义的队列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 20:16:54

考虑这样一个简单的添加任务。

代码语言:javascript
复制
@app.task()
def add(x, y):
    return x + y

下面是一种调用块任务的简单方法。

代码语言:javascript
复制
res = add.chunks(zip(range(10), range(10)), 2)()

这将给定的10个任务块为5个大小为2的任务,并将chunked tasks添加到默认队列中。如果要将其路由到不同的队列,则必须在调用任务时指定它。

代码语言:javascript
复制
res = add.chunks(zip(range(10), range(10)), 2).apply_async(queue='my_special_queue')

然后启动此队列的工作人员以使用任务。

代码语言:javascript
复制
worker -A your_app worker -l info -Q my_special_queue
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26388398

复制
相关文章

相似问题

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