2013-03-04 18 views

cevap

12

Neden bir kereviz görev modeli oluşturmuyorsunuz ve bu modele bir kereviz görevi kimliği kaydetmiyorsunuz? Sonra

class CeleryModel(models.Model): 
    celery_task_id = models.CharField(max_length = 50, unique=True) 

:

def some_celery_task(): 
    result = celery_task.delay() 
    celery_task = CeleryModel(celery_task_id = result.id) 
    celery_task.save() # added save line 

Kişisel tamsayı değeri şöyle olur: celery_task.id gerçek, benzersiz celery_task_id ile haberleşmek için.

GÜNCELLEME: Başka bir yol ...

İlk python manage.py inspectdb > inspectdb.py. Bu dosya içerisinde bulacaksınız:

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' 

İleri, python manage.py startapp celery_model. Bu dosyayı models.py dosyasına koyun. Güney kullanıyorum, bu yüzden son adımım python manage.py convert_app celery_model olacaktır. Ancak, gereksizdir. Artık bu kereviz veri tabanına django seviyesine erişiminiz var ve her görev için birincil anahtarı tamsayı değeriniz olarak okuyabilirsiniz. Örn

>>> 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 

Birisi akıllı Sana datatable kurcalamak istiyorum sanmıyorum çünkü CeleryTaskmeta salt okunur modelini nasıl bilemez.

GÜNCELLEME: Sorunuzun son kısmına:

>>> 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> 
+0

Ayrıntılı ve açık bir açıklama için teşekkür ederiz! – pynovice

+1

Sorun şu ki, işlem başladığında task_id'i almak istiyorum. Veriler, iş başarıyla tamamlandıktan sonra CeleryTaskMeta tablosunda yazılır. – pynovice

+0

@Cole Veritabanındaki bir zaman uyumsuz kazıma sonuçlarını nasıl saklarsınız? – losee

0

kereviz görev Kimliğini almak için görev başlatıldığında ben aşağıdakileri yapın:

my_task içinde bir yöntemdir
process_task = my_task.apply_async(args=[args]) 
task_id = process_task.task_id 

tasks.py

İlgili konular