1) Şu anda bir REST api ortaya koyan bir web uygulaması üzerinde çalışıyorum ve isteği işlemek ve çözmek için Django ve Kerevizi kullanıyor. Çözülmesi için bir talep için, bir amqp kuyruğuna bir dizi kereviz görevi sunulmalıdır, böylece işçiler üzerinde çalıştırılırlar (diğer makinelerde yer alırlar). Her görev çok yoğun bir şekilde yoğun bir işlemdir ve bitirmek için çok uzun (saatler) sürmektedir.Django-kereviz projesi, sonuç-arka uçtan sonuçların nasıl ele alınacağı?
Ayrıca, sonuç olarak arka uç olarak amqp kullanacak şekilde Kerery'yi yapılandırdım ve Celery'nin aracı olarak RabbitMQ kullanıyorum.
Her görev, bir DB'de daha sonra depolanması gereken bir sonucu döndürür, ancak doğrudan işçiler tarafından değil. Sadece "merkezi düğüm" - RabbitMQ kuyruğunda django-kereviz ve yayınlama görevlerini yürüten makine - bu depolama birimine erişime sahiptir, bu nedenle işçilerin sonuçlarının bu makinede bir şekilde geri dönmesi gerekir.
Sorun, daha sonra görev yürütme sonuçlarını nasıl işleyebilirim? Bir işçi bittikten sonra, sonuç, yapılandırılmış sonuç-arka planda (amqp) saklanır, ancak şimdi sonuçları oradan almak ve işlemek için en iyi yolun ne olacağını bilmiyorum. temelde ben düzenli olarak bu komutu çalıştırır kod özel bir parçasına ihtiyacımız olduğu anlamına gelir
result.state
:
ı belgelerinde bulabildiğim tüm
Birlikte zaman zaman sonuçları durumunu kontrol edebilir ya olmasıdır ve bu nedenle sadece bununla meşgul bir bütün iplik/işlem tutar, ya her şeyi engellemek için: bir görev bitene kadar ben istemez budur,result.get()
.
Düşünebildiğim tek çözüm, "merkezi düğümde", her görev tarafından teslim edilen async_results öğelerini temelde kontrol eden ve görev varsa eylemde bulunacak bir işlev olan ek bir iş parçacığına sahip olmaktır. bitmiş bir durum.
Başka herhangi bir öneri var mı? Ayrıca, arka uç sonuçlarının işlenmesi "merkezi düğümde" gerçekleştiği için, bu işlemin bu makine üzerindeki etkisini en aza indirgemektir.
Bunu yapmanın en iyi yolu ne olurdu?
2) İnsanlar genellikle işçilerden elde edilen sonuçlarla uğraşma ve arka uç sonuçlarına nasıl yaklaşma problemini çözer? (arka uç sonuçlarının yapılandırıldığını varsayarsak)
'Merkezi düğümde bir kereviz görevi tüketicisi. Bu tüketicinin amacı, verileri veritabanına kaydetmek. Bu, yalnızca iş alanı içinde veri bulunduğunda çalışır, dolayısıyla periyodik değildir. – Crazyshezy