celery - 任务完成时调用函数

django

1个回答

写回答

zhengziz

2025-06-15 20:30

+ 关注

Python
Python

Celery是一个高效、灵活且易于使用的分布式任务队列框架,它能够帮助开发者轻松地处理异步任务。其中一个非常有用的特性是在任务完成时调用函数,这使得我们可以在任务执行完毕后执行一些特定的操作。本文将介绍如何使用Celery的任务完成回调函数,并提供一个实际案例来帮助读者更好地理解。

什么是任务完成回调函数?

任务完成回调函数是指在Celery任务执行完毕后自动调用的函数。这个函数可以执行一些额外的操作,例如发送通知、更新数据库、记录日志等等。在Celery中,我们可以通过在任务函数上添加装饰器@task来指定任务完成回调函数。

如何使用任务完成回调函数?

要使用任务完成回调函数,我们首先需要安装Celery并配置好任务队列。接下来,我们可以定义一个任务函数,并在其上方添加@task装饰器。在这个装饰器中,我们可以使用on_success参数来指定任务完成时调用的回调函数。下面是一个示例:

Python

from celery import Celery

app = Celery('myapp', broker='redis://localhost:6379/0')

@app.task(on_success=my_callback)

def my_task():

# 任务逻辑

def my_callback(result):

# 回调函数逻辑

在上面的代码中,我们定义了一个名为my_task的任务函数,并使用on_success参数指定了一个名为my_callback的回调函数。当my_task任务执行完毕后,my_callback函数将被自动调用。

示例案例:发送邮件通知任务完成

让我们通过一个实际案例来更好地理解任务完成回调函数的用途。假设我们有一个电子商务网站,当用户下单后,我们需要给用户发送一封订单确认邮件。但是发送邮件是一个相对耗时的操作,为了不影响用户的购物体验,我们可以使用Celery来将发送邮件的任务放入队列中异步执行,并在任务完成后发送通知邮件给用户。

首先,我们需要安装Celery并配置好任务队列。然后,我们可以定义一个发送邮件的任务函数,并添加任务完成回调函数来发送通知邮件。下面是一个简化的示例代码:

Python

from celery import Celery

from sendgrid import SendGridAPIClient

from sendgrid.helpers.mAIl import MAIl

app = Celery('myapp', broker='redis://localhost:6379/0')

@app.task(on_success=send_notification)

def send_emAIl(to_emAIl, subject, content):

# 发送邮件的逻辑

def send_notification(result):

# 发送通知邮件的逻辑

message = MAIl(

from_emAIl='noreply@example.com',

to_emAIls=result['to_emAIl'],

subject='任务完成通知',

plAIn_text_content='您的订单已成功处理。'

)

try:

sg = SendGridAPIClient('your_sendgrid_api_key')

response = sg.send(message)

print(response.status_code)

print(response.body)

print(response.headers)

except Exception as e:

print(str(e))

在上面的代码中,我们定义了一个名为send_emAIl的任务函数,并使用on_success参数指定了一个名为send_notification的回调函数。当send_emAIl任务执行完毕后,send_notification函数将被自动调用,发送一封通知邮件给用户。

使用Celery的任务完成回调函数可以帮助我们在任务执行完毕后执行一些特定的操作。本文介绍了如何使用任务完成回调函数,并提供了一个发送邮件通知任务完成的实际案例。希望读者能够通过本文对Celery的任务完成回调函数有更深入的了解,并能够在实际项目中灵活运用。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号