# models.py
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
text_blob = models.CharField(max_length=50000)
# tasks.py
import celery
@celery.task
def my_task(person):
# example operation: does something to person
# needs only a few of the attributes of person
# and not the entire bulky record
person.first_name = person.first_name.title()
person.last_name = person.last_name.title()
person.save()
W mojej aplikacji gdzieś mam coś takiego:Czy instancje obiektu modelu django powinny być przekazywane do selera?
from models import Person
from tasks import my_task
import celery
g = celery.group([my_task.s(p) for p in Person.objects.all()])
g.apply_async()
- naciowego pikle p wysłać go na prawo pracownika?
- Jeśli pracownicy pracują na wielu maszynach, czy cały obiekt osoby (wraz z obszernym text_blob, który przede wszystkim nie jest wymagany) będzie przesyłany przez sieć? Czy istnieje sposób, aby tego uniknąć?
W jaki sposób mogę wydajnie i równomiernie rozpowszechniać rekordy Person pracownikom działającym na wielu maszynach?
Czy to może być lepszy pomysł? Czy nie przytłoczyłoby bazy danych, gdyby osoba miała kilka milionów rekordów?
# tasks.py import celery from models import Person @celery.task def my_task(person_pk): # example operation that does not need text_blob person = Person.objects.get(pk=person_pk) person.first_name = person.first_name.title() person.last_name = person.last_name.title() person.save() #In my application somewhere from models import Person from tasks import my_task import celery g = celery.group([my_task.s(p.pk) for p in Person.objects.all()]) g.apply_async()
użyć opóźnienia zadania i ustawić timer dla tego – catherine
@catherine, w jaki sposób timer mi w tym przypadku pomoże? –
Przepraszam za ten czas mój błąd, to tylko opóźnienie zadania.Kiedy dana osoba ma miliony rekordów, seler odkłada zadania i zarządza nimi, wysyłając jeden po drugim – catherine