簡體   English   中英

Django-使用選項但不使用函數參數執行Celery任務

[英]Django - Execute Celery task with options but no function arguments

我是第一次使用芹菜。 查看文檔,似乎我已經嘗試了所有事情來使用apply_async正確執行任務。 我正在從信號方法調用任務,因此它位於signal.py中。

signal.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)

task.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的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM