将芹菜文件表明,这是一个坏主意,有任务等待的其他任务的结果。但建议的解决方案(见“好”的标题)离开是可喜爱的东西。具体来说,没有明确的方法可以将子任务的结果返回给调用者(同样,这很丑陋)。
那么,有什么方法可以“链接”工作,以便呼叫者获得最终工作的结果?例如,使用add
示例:
>>> add3 = add.subtask(args=(3, ))
>>> add.delay(1, 2, callback=add3).get()
6
或者,可以返回Result实例吗?例如:
@task
def add(x, y, callback=None):
result = x + y
if callback:
return subtask(callback).delay(result)
return result
这样就可以通过简单的方法检索链中“最终”工作的结果:
result = add(1, 2, callback=add3).delay()
while isinstance(result, Result):
result = result.get()
print "result:", result
您可以用芹菜链来做。参见https://celery.readthedocs.org/en/latest/userguide/canvas.html#chains
@task()
def add(a, b):
time.sleep(5) # simulate long time processing
return a + b
链接工作:
# import chain from celery import chain
# the result of the first add job will be
# the first argument of the second add job
ret = chain(add.s(1, 2), add.s(3)).apply_async()
# another way to express a chain using pipes
ret2 = (add.s(1, 2) | add.s(3)).apply_async()
...
# check ret status to get result
if ret.status == u'SUCCESS':
print "result:", ret.get()
问题内容: 我不是在问什么合适的链接语法,我知道它可能是这样的: 但是,我真的很想了解它的内部工作,据我所知,链接是与其他著名框架相比的优势之一,但是对于像我这样的新手程序员来说,这是很多抽象的东西,我敢肯定在那里可以提供一个解释,让我了解链接的工作方式。 谢谢! 问题答案: 如果您的对象具有某些方法,并且每个方法都返回带有方法的对象,则只需从返回的对象中调用一个方法。
问题内容: 有没有在Python中使用异常链的标准方法?就像Java异常“引起”一样? 这是一些背景。 我有一个具有一个主要异常类的模块: 在此模块中的某处将有: 基本上,此代码段仅应引发DSError并告诉我发生了什么以及为什么。问题是try块可能会引发许多其他异常,因此我更愿意执行以下操作: 这是标准的pythonic方法吗?我没有在其他模块中看到异常链,那么如何在Python中完成? 问题答
问题内容: 有什么办法可以限制celery的工人数量?我的服务器很小,celery总是在1个核心处理器上创建10个进程。我想将此数目限制为3个进程。 问题答案: 我尝试在我的settings.py文件中将并发设置为1,将max_tasks_per_child设置为1,并同时运行3个任务。它仅以用户的身份生成1个进程,而以Celery的形式生成其他2个进程。它应该只运行1个进程,然后等待它完成,然后
请求yo帮助分页链接。在我的数据库中,我有3条记录,我想每页显示一条记录。当我选择分页链接的下一个数字时,数据没有被提取。事情是当我单击分页链接的第2个数字时,echo var_dump()显示Result是空的,并且我没有获得echo$data->电子邮件的任何值。但是当我搜索时第一次能够显示单个记录,问题只是分页的下一个链接,那么可能会有什么错误呢?我不能得到一个答案,我不确定发生了什么,所以
问题内容: 我想知道Java链接器如何工作。具体来说,它将类,接口,包,方法等以何种顺序组合为jvm可执行格式。我在这里找到了一些信息,但是关于链接顺序的信息并不多。 问题答案: 没有Java“链接器”之类的东西。但是,存在类加载器的概念,该类加载器给出了“某处”中的java字节代码数组,可以创建类的内部表示形式,然后可以与etc 一起使用。 在这种情况下,接口只是特殊的类。加载类后,方法和字段将
问题内容: 我有一个运行Django应用程序的dockerized设置,在其中使用Celery任务。celery使用Redis作为经纪人。 版本控制: Docker版本17.09.0-CE,构建afdb6d4 docker-compose版本1.15.0,构建e12f3b9 的Django = = 1.9.6 django-celery-beat == 1.0.1 celery== 4.1.0 c