如何解决信号和任务文件未在 django celery 中连接
我正在使用 Django 信号触发任务(使用 Django celery 包向订阅者发送大量电子邮件),当管理员发布博客文章时,该任务是从 Django 管理员创建的。信号被触发但任务文件中的任务函数没有被调用。因为我在任务函数里面放了一个不打印的打印函数。
我的 signlas.py 文件:
from apps.blogs.celery_files.tasks import send_mails
from apps.blogs.models import BlogPost,Subscribers
from django.db.models.signals import post_save
from django.dispatch import receiver
def email_task(sender,instance,created,**kwargs):
if created:
print("@signals.py")
send_mails.delay(5)
post_save.connect(email_task,sender=BlogPost,dispatch_uid="email_task")
我的 task.py 文件
from __future__ import absolute_import,unicode_literals
from celery import shared_task
# from celery.decorators import task
from apps.blogs.models import BlogPost,Subscribers
from django.core.mail import send_mail
from travel_crm.settings import EMAIL_HOST_USER
from time import sleep
@shared_task
def send_mails(duration,*args,**kwargs):
print("@send_mails.py")
subscribers = Subscribers.objects.all()
blog = BlogPost.objects.latest('date_created')
for abc in subscribers:
sleep(duration)
print("i am inside loop")
emailad = abc.email
send_mail('New Blog Post ',f" Checkout our new blog with title {blog.title} ",EMAIL_HOST_USER,[emailad],fail_silently=False)
这里。不执行 print("@send_mails.py")
,但执行了signals.py 文件中的 print("@signals.py")
。因此,在创建 Blogpost 模型对象后接收信号,但不会执行 task.py 中的 send_mails 函数。
我已经安装了 celery 和 redis 服务器,并且都运行良好。
主要的是,如果我从信号文件中删除 .delay(5) 而只是在 email_task 中使用 send_mails()
,它可以完美运行并且我正在收到电子邮件。但是一旦我添加了 delay() 函数,任务文件中的功能就不会被调用。这是什么问题??
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。