2016-04-06 18 views
0

Django ile kereviz çalışıyorum. Görevlerimi kullanarak veri tabanımdaki bir nesne nesnesini içe aktarıyorum. her görev bir nesneyi içe aktarır. eşzamanlılık 2'dir. Akış nesneleri içinde çoğaltılabilir, ancak veritabanımın içinde olmamalıdır.django/celery veri içe aktarma, varolan verileri denetlemede başarısız oluyor.

kod i çalıştırıyorum:

if qs.exists() and qs.count() == 1: 
    return qs.get() 
elif qs.exists(): 
    logger.exception('Multiple venues for same place') 
    raise ValueError('Multiple venues for same place') 
else: 
    obj = self.create(**defaults) 

sorun akışı içinde nesneleri yinelenen ve birbirlerine çok yakın olup olmadığını, uygulama hala iki kez aynı nesneleri alır olmasıdır.

Bu eşzamanlılık ayarıyla db denetimlerinin düzgün çalışmadığını varsayalım. Bu sorunu çözmek için hangi mimariyi tavsiye edersiniz?

cevap

1

Sen mimarisi kilitleme kullanmak zorunda, bu yüzden, bunu yapmak python-redis-lock kullanabilirsiniz aynı anda kısmını alma nesneyi yürütülmesini iki görevi engeller.

+0

Vay, büyük tavsiye. bunun için gidecek! Benim ara çözüm, en azından db'nin tutarlı kalmasını garantilemek için iki küfe özel bir kısıtlama koymaktı. Yükseltilmiş hata kereviz görevini öldürür. Şimdi daha kaba kuvvet benzeri bir girişim için. – patroqueeet

İlgili konular