微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

信号和任务文件未在 django celery 中连接

如何解决信号和任务文件未在 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 举报,一经查实,本站将立刻删除。