MySQL
ile kereviz kullanıyorum. Görev kimliğini bir veritabanında veya bir kereviz task
değişkeninde düz bir tam sayı olarak saklamak istiyorum. Bunu nasıl yapabilirim?Her kereviz görevi için bir görev kimliğinin saklanması
cevap
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>
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öntemdirprocess_task = my_task.apply_async(args=[args])
task_id = process_task.task_id
tasks.py
Ayrıntılı ve açık bir açıklama için teşekkür ederiz! – pynovice
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
@Cole Veritabanındaki bir zaman uyumsuz kazıma sonuçlarını nasıl saklarsınız? – losee