2012-03-28 18 views
11

Kereviz, önceki yürütme tamamlanmadan önce düzenli bir görev yürütmesini nasıl önlersiniz?Bir Kereviz görevinin nasıl sağlanacağı Üst üste çakışan Kerbeğin görev yürütmelerini önleme

Ortak bir veritabanı sunucusuna bağlı, Celery görevlerini yürüten bir sunucu kümem var ve her sunucunun aynı görevi aynı anda aynı anda çalıştıran farklı sunucularla aynı anda çalıştırabildiğini görüyorum. Bu, verilerimi acı bir şekilde ince yollarla bozan birçok yarış koşuluna neden oluyor.

Celery's docs aracılığıyla okuyorum, ancak açıkça buna izin veren herhangi bir seçenek bulamıyorum. Bir similar question buldum, ancak önerilen düzeltme, Django'nun önbellekleme çerçevesine bağlı olduğu için bir kesmek gibi görünüyor ve bu nedenle bir kümedeki tüm sunucular tarafından paylaşılmayabilir ve aynı anda birden çok sunucunun aynı görevi yürütmesine izin verebilir.

Veritabanında hangi görevlerin şu anda çalıştırıldığını kaydetmek ve veritabanı kaydı temizleninceye kadar yeniden çalıştırmamak için Kereviz'de herhangi bir seçenek var mı?

Django-Kereviz modülü kullanarak ve kulüpler sayfalara sağlar olsa bile/admin/djcelery/taskstate/ve/yönetici/djcelery/workerstate/Ben herhangi uzun çalışan görevler veya işçi daha görmedim orada görün.

cevap

2

Eğer olsaydım, aynı anda çalıştırılamayacak işler için özel bir kuyruk kurardım. Daha sonra, sadece bu sıra için ayrı bir çalışanı başlatabilirsiniz.

3

Standart yol, django standart önbellek mekanizması aracılığıyla paylaşılan kilidi kullanmaktır. Resmi belgelerden this recipe'a bakın

+0

Ve bahsettiğim gibi, bu bir küme ayarında sağlam bir mekanizma değil ... Neden veritabanını kullanan bir seçenek yok? – Cerin

+0

Memcached arka ucunu kullanın ve küme işlevselliğini –

+1

@AlexLebedev elde edeceksiniz, bu iyi bir nokta, ancak * ve yalnızca eğer küme içindeki makineler arka uç paylaşıyorsa. Örneğin, yerel olarak memcached çalıştırmak ve her kutuda bir localhost memcached arka uç kullanmak için düşünülemez. Mantıksal olarak bariz ama ben sadece "ah, memcached kullanıyorum, problemi çözdüm" diye düşünmek istemedim. – mrooney

İlgili konular