Używam selera z MySQL
. Chcę zapisać identyfikator zadania jako zwykłą liczbę całkowitą w bazie danych lub w zmiennej selekcji task
. Jak mogę to zrobić?Przechowywanie identyfikatora zadania dla każdego zadania selera w bazie danych
Odpowiedz
Dlaczego nie utworzyć modelu zadania selera i zapisać identyfikator zadania selera do tego modelu?
class CeleryModel(models.Model):
celery_task_id = models.CharField(max_length = 50, unique=True)
Następnie:
def some_celery_task():
result = celery_task.delay()
celery_task = CeleryModel(celery_task_id = result.id)
celery_task.save() # added save line
Twoja wartość całkowita będzie wówczas: celery_task.id
korespondować z rzeczywistą, niepowtarzalnym celery_task_id.
UPDATE: inna droga ...
Pierwszy python manage.py inspectdb > inspectdb.py
. Wewnątrz tego pliku znajduje się:
class CeleryTaskmeta(models.Model):
id = models.IntegerField(primary_key=True)
task_id = models.CharField(max_length=765, unique=True)
status = models.CharField(max_length=150)
result = models.TextField(blank=True)
date_done = models.DateTimeField()
traceback = models.TextField(blank=True)
hidden = models.IntegerField()
meta = models.TextField(blank=True)
class Meta:
db_table = u'celery_taskmeta'
Dalej, python manage.py startapp celery_model
. Umieść ten plik w pliku models.py. Używam południa, więc moim ostatnim krokiem będzie python manage.py convert_app celery_model
. Jednak jest to niepotrzebne. Teraz masz dostęp do poziomu django dla tego selekcji selera i możesz odczytać klucz podstawowy dla każdego zadania jako wartość całkowitą. Np
>>> ct = CeleryTaskmeta.objects.get(id=1)
>>> for k,v in ct.__dict__.items(): print k,v
...
status SUCCESS
task_id 2fa95f24-7640-434c-9fef-0732ac1d23c7
date_done 2013-02-17 19:22:56+00:00
traceback None
_state <django.db.models.base.ModelState object at 0x10263fa90>
meta eJxrYKotZAzlSM7IzEkpSs0rZIotZC7WAwBREgb9
result gAJLBC4=
hidden 0
id 1
Ktoś mądry będzie wiedział jak zrobić CeleryTaskmeta
model tylko do odczytu, ponieważ nie sądzę byś chcą manipulować przy DataTable.
UPDATE: do ostatniej części pytania:
>>> from celerytest.tasks import add
>>> result = add.delay()
>>> result.int_id = 1
>>> for k,v in result.__dict__.items(): print k,v
...
parent None
app <Celery default:0x10264df10>
task_name celerytest.tasks.add
int_id 1
id 01503afd-d196-47af-8e10-e7dc06603cfc
backend <djcelery.backends.database.DatabaseBackend object at 0x1026842d0>
Aby uzyskać identyfikator zadania seler, gdy zadanie jest uruchomiona I wykonaj następujące czynności:
process_task = my_task.apply_async(args=[args])
task_id = process_task.task_id
gdzie my_task to metoda wewnątrz tasks.py
- 1. Zadania selera nie są przetwarzane
- 2. Pomiar czasu wykonywania zadania selera
- 3. selera - zadania, które należy uruchomić w priorytecie
- 4. STPrivilegedTask poprosić o hasło dla każdego zadania
- 5. Zadania, zadania Cron lub Backendy dla aplikacji
- 6. Selery - Uzyskaj identyfikator zadania dla bieżącego zadania
- 7. Czy zadania Selera mogą przetrwać ponowne uruchomienie?
- 8. Tworzenie oddzielnego połączenia z bazą danych dla każdego pracownika selera
- 9. Niektóre zadania Selera działają, inne są niezarejestrowane.
- 10. Trasa zadania selera do określonej kolejki
- 11. ThreadStatic dla zadania TPL
- 12. Przechowywanie pozwoleń na aplikacje w bazie danych
- 13. konstruowania ciąg identyfikatora dla każdego wiersza danych
- 14. Twórz zadania związane z selera, a następnie uruchom synchronicznie
- 15. Nie można wywołać zadania selera w testach Django synchronicznie
- 16. Czy zatwierdzane są zadania wstępne w selera naciowego?
- 17. Wyrażenie cron dla każdego> 60 minutowego zadania
- 18. Uruchamianie zadania po wszystkie zadania zostały zakończone
- 19. Przechowywanie widoków ASP.Net MVC w bazie danych
- 20. Zadania w tle dla aplikacji
- 21. Rx i zadania - anulować uruchamianie zadania po utworzeniu nowego zadania?
- 22. Przechowywanie tablicy całkowitej w bazie danych Django
- 23. Przechowywanie częściowych dat w bazie danych
- 24. Przechowywanie obiektów R w relacyjnej bazie danych
- 25. Przechowywanie wartości NaN w bazie danych SQLite
- 26. Przechowywanie rozmiarów plików w bazie danych
- 27. Uzyskaj identyfikator niepowodzenia zadania dla aktualnie uruchomionego zadania Hadoop.
- 28. Rake: odpowiednik zadania w Django
- 29. Tworzenie zadania cron dla mysqldump
- 30. Przechowywanie logiki warunkowej dla zgodności w bazie danych
Dziękujemy za dokładne i czyste wyjaśnienie! – pynovice
Bro problem polega na tym, że chcę odzyskać identyfikator task_id w momencie rozpoczęcia procesu. Okazuje się, że dane są zapisywane w tabeli CeleryTaskMeta dopiero po pomyślnym zakończeniu zadania. – pynovice
@Cole jak przechowujesz wyniki z asynchronicznego skrobania w bazie danych? – losee