Skrivning og kald af @shared_task
Kør funktioner asynkront med delay()
Skrivning og kald af @shared_task er en gratis Django Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Django Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Django Academy-kurset indeholder 4 lektioner i alt.
Opgaver er bare funktioner
En Celery-opgave er en almindelig Python-funktion med en decorator øverst. Decoratoren lærer Celery, hvordan opgaven skal lægges i kø og køres senere.
Hvorfor shared_task
Brug @shared_task i stedet for @app.task, så dine opgaver ikke afhænger af en bestemt Celery-app. Det er standardvalget i Django-apps.
Skriv din første opgave
Placér opgaver i en tasks.py inde i en app. Dekorér en almindelig funktion, så finder Celery den via autodiscover.
from celery import shared_task
@shared_task
def add(x, y):
return x + yKald den med delay
Hvis du vil køre en opgave i baggrunden, skal du kalde .delay() i stedet for at kalde funktionen direkte. Det lægger jobbet i kø og returnerer med det samme.
add.delay(2, 3) # queued, runs on a workerdelay sammenlignet med direkte kald
Et kald til add(2, 3) kører med det samme i din webproces. Et kald til add.delay(2, 3) sender det til køen. Samme funktion, men meget forskellig timing.
Send enkle argumenter
Argumenter serialiseres til JSON og sendes til broker'en, så send enkle værdier som ID'er og strenge i stedet for hele model-objekter.
send_email.delay(user.id) # good
send_email.delay(user) # avoid: not serializableAsyncResult-håndtaget
delay() returnerer en AsyncResult. Du kan gemme dens id og senere kontrollere status eller hente returværdien fra resultatbackend'en.
result = add.delay(2, 3)
print(result.id)Mere kontrol med apply_async
Har du brug for en nedtælling eller en bestemt kø? Brug apply_async(), den mere omfattende version af delay med ekstra indstillinger.
add.apply_async((2, 3), countdown=10) # run after 10sPrøv igen ved fejl
Bind en opgave, og kald self.retry() for at køre den igen efter en fejl. Det er ideelt til ustabile netværkskald, som måske lykkes næste gang.
@shared_task(bind=True, max_retries=3)
def fetch(self):
try:
call_api()
except Exception as e:
raise self.retry(exc=e)Idempotente opgaver vinder
Da opgaver kan blive kørt igen, bør du gøre dem idempotente: Det skal være sikkert at køre dem to gange, uden at der bliver trukket dobbelt eller sendt dobbelt. 🔁
Hold øje med arbejderloggen
Når du kalder delay, skal du holde øje med arbejderens terminal. Du kan se, at opgaven er modtaget, og se dens resultat. Det er den hurtigste måde at fejlfinde på. 👀
Hurtigt tjek
Hvordan kører du en Celery-opgave i baggrunden?
Opsummering: Skrivning af opgaver
Dekorér en funktion med @shared_task, kald den med .delay() for at placere den i kø, send simple id'er, og design opgaverne, så de kan prøves igen på en sikker måde. 🎯
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Skrivning og kald af @shared_task” gratis?
Ja — alle 3 lektioner i læringssporet Django Academy, inklusive “Skrivning og kald af @shared_task”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Django Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Skrivning og kald af @shared_task”?
Kør funktioner asynkront med delay() Du øver dig i Django Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Django Academy?
Der kræves ingen tidligere erfaring. Django Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Skrivning og kald af @shared_task”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Django Academy-lektion?
Ja. Alle Django Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvorfor baggrundsopgaver er nødvendige
- Opsætning af Celery med en broker
- Skrivning og kald af @shared_task
- Planlagte jobs med Celery Beat