Django-执行带有选项但没有函数参数的Celery任务



我是第一次使用Celery。查看文档,我似乎已经尽了一切努力来使用apply_async正确执行任务。我从信号方法调用任务,所以它在signals.py.中

信号.py

from django.db.models.signals import post_save
from django.dispatch import receiver
from datetime import datetime, timedelta
from games.models import Game
from contacts.models import Contact
from msgs.models import SMS
from msgs.tasks import sendSMS_Scheduled

@receiver(post_save, sender=Game)
def createSMS(sender, instance, created, **kwargs):
if created:
contacts = Contact.objects.all()
body = SMS.defaultMessageBuilder(
location=instance.location,
time=instance.schedStart
)
eta = instance.schedStart - timedelta(hours=7)
expire = instance.schedStart
result = sendSMS_Scheduled.apply_async(eta=eta, expires=expire)

tasks.py

from celery import shared_task
from SMSerSite.celery import app
from contacts.models import Contact
from .models import SMS
@shared_task(name='SMSerSite.msgs.tasks.sendSMS', bind=True)
def sendSMS_Scheduled():
messages = self.request.sms_set.all()
SMS.sendSMS(messages)

当代码运行时,我得到一个错误:sendSMS_Scheduled() takes 0 positional arguments but 1 was given。我尝试了各种方法来编写使用apply_async调用任务的行,但都不起作用。我做错了什么?

当您使用bind=True关键字参数时,您的任务会获得对自身的引用,因此将方法签名更改为:

def sendSMS_Scheduled(self):

作为附带说明,请记住,在此上下文中的self是实际的芹菜任务。你有一行self.request.sms_set.all(),这让我觉得你期望self是django特定的东西。

相关内容

  • 没有找到相关文章

最新更新