Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的Python代码有问题吗?(职能)_Python_Django_Queue_Rabbitmq_Celery - Fatal编程技术网

我的Python代码有问题吗?(职能)

我的Python代码有问题吗?(职能),python,django,queue,rabbitmq,celery,Python,Django,Queue,Rabbitmq,Celery,如果我运行这段代码,我希望任务会不断地添加到队列中。但事实并非如此!只有第一个任务5,2被添加到队列并被处理 由于此行的原因,应该会不断添加任务:add.delay1,9 注意:我需要每个任务执行另一个任务 在我看来,周期性任务装饰器正在创建周期前任务,任务只创建一个任务。延迟只是异步执行它 您应该只使用周期性任务,而不是递归。add inside函数体指的是原始函数,而不是它的修饰版本 如果您只需要重复运行任务,请改用@periodic_task。只有当每次延迟不同时,才需要递归。在这种情况下

如果我运行这段代码,我希望任务会不断地添加到队列中。但事实并非如此!只有第一个任务5,2被添加到队列并被处理

由于此行的原因,应该会不断添加任务:add.delay1,9


注意:我需要每个任务执行另一个任务

在我看来,周期性任务装饰器正在创建周期前任务,任务只创建一个任务。延迟只是异步执行它

您应该只使用周期性任务,而不是递归。

add inside函数体指的是原始函数,而不是它的修饰版本


如果您只需要重复运行任务,请改用@periodic_task。只有当每次延迟不同时,才需要递归。在这种情况下,子类化Task而不是使用decorator,您将能够毫无问题地使用递归。

您应该查看子任务和回调,可能会给出您正在寻找的答案


不,我需要每个任务执行另一个任务。我该怎么做?那是什么意思?你能给我们描述一下你认为add.delay1,9应该做什么以及为什么吗?我认为add.delay1,9会调用相同的函数add。然后,因为有一个decorator,它将把它当作一个任务,在这种情况下,另一个任务将运行。任务将继续创建,而且永远不会结束。异步任务可能会运行,因为它们是异步运行的,但您永远不会使用它们的输出。事实上,它不会显示在控制台中。所以我相信它们永远不会运行。首先,你需要这个任务来执行同一个任务,或者另一个任务?其次,你为什么需要它?有什么原因吗,或者你只是依附于现在的生活方式?
#tasks.py
from celery.decorators import task

@task()
def add(x, y):
    add.delay(1, 9)
    return x + y

>>> import tasks
>>> res = tasks.add.delay(5, 2)
>>> res.result()
7