要捕获来自Celery任务发送的Django信号,需要使用Celery提供的signals
模块和Django的信号机制。下面是一个解决方法的示例代码:
# tasks.py
from django.dispatch import receiver
from celery.signals import task_success
@receiver(task_success)
def celery_task_success_handler(sender, **kwargs):
# 在这里处理成功的任务
task = kwargs['task']
print(f"Celery task {task.name} succeeded.")
# views.py
from celery import shared_task
@shared_task
def my_task():
# 执行任务的代码
pass
def my_view(request):
my_task.delay()
return HttpResponse("Task started.")
在上面的示例中,tasks.py
文件定义了一个信号处理器函数celery_task_success_handler
,它使用@receiver
装饰器来接收task_success
信号。当任何一个Celery任务成功完成时,该函数将被调用。你可以在这个函数中处理任务成功的逻辑,比如记录日志或发送通知。
在views.py
文件中,my_task
是一个Celery任务,使用@shared_task
装饰器定义。当my_view
视图函数被调用时,它会异步地执行my_task
任务。你可以根据自己的需求将任务的执行代码放在my_task
函数中。
要注意的是,为了使Django能够正确地捕获Celery任务发送的信号,你需要确保在你的Django项目的配置文件中正确配置了Celery。具体的配置步骤可以参考Celery的文档。
上一篇:捕获来自不同小部件的信号