gpt4 book ai didi

python - 使用 Celery 成功执行一个函数后运行另一个任务

转载 作者:行者123 更新时间:2023-11-30 22:35:06 33 4
gpt4 key购买 nike

我是 celery 模块的新手,我想在成功执行特定函数后执行一项任务。

我在 django 应用程序中进行了以下更改:

更改settings.py:

import djcelery
djcelery.setup_loader()
BROKER_URL = 'amqp://rahul:amvarish@127.0.0.1:5672//'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_IMPORTS = ('projectmanagement.tasks',)

创建tasks.py:

from celery import task
@task()
def add(x, y):
print (x+y)
return x + y

我的view.py:

class Multiply(APIView):
def get(self,request):
x = request.GET['x']
y = request.GET['y']
try:
z= x*y
data = {'success':True,'msg':'x and y multiply','result':z}
return HttpResponse(json.dumps(data),content_type="application/json")
except Exception,e:
print str(e)
data = {'success':False,'msg':'Error in multiplying x and y'}
return HttpResponse(json.dumps(data),content_type="application/json")

现在我希望在成功执行 multiply 方法后调用我的 celery 任务。

我应该在 View 函数中的哪里调用我的任务,以便我的 API 响应独立于 celery 任务执行?

最佳答案

您可以使用 .apply_async 调用您的任务使调用异步,从而产生以下执行图:

                                |
|
normal flow
|
| async
my_task.apply_async -------> do my task_stuff
| call
|
flow continues
without waiting on my_task execution
|
...

从上述内容中得出,在您的代码中,您应该按如下方式调用 add 方法:

from path.to.your.tasks import add

class Multiply(APIView):
def get(self,request):
x = request.GET['x']
y = request.GET['y']
try:
z= x*y
add.apply_async(x, y) # will execute independently
data = {'success':True,'msg':'x and y multiply','result':z}
return HttpResponse(json.dumps(data),content_type="application/json")
except Exception,e:
print str(e)
data = {'success':False,'msg':'Error in multiplying x and y'}
return HttpResponse(json.dumps(data),content_type="application/json")

关于python - 使用 Celery 成功执行一个函数后运行另一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44669607/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com