Uzun bir qeue aracılığıyla birden çok işçi çalıştıran

2 Cevap php

Ben uzun bir mysql kuyruk var. Ben her kuyruğunu işler 1 işçi komut dosyası var.

Bu işçi çalışıyor gibi ancak, veritabanı güncelleme ya da yeni bir satır ekler almak olabilir.

bir örnek işçi komut

get_current_queue = SELECT from queue...

while(get_current_queue) {

update_current_row_from_queue "processing"

//some cpu intensive processing here that takes varying amount of time.

}

Sorun işçi komut verilen zamanda kuyruk ne kadar süre bağlı olarak zaman farklı miktarda alır, ve ne kadar her cpu işlem (ex için video dönüştürme) almasıdır.

İlki çalışırken ben başka bir işçi komut dosyası çalıştırdığınızda, bu yüzden henüz ilk işçi tarafından kuyruk veritabanında "işlem" olarak işaretlenmiş sıra, ikinci işçinin yapılacaklar listesi üzerine düşecek.

Ben bu sorunu yaklaşım nasıl bilmiyorum.

Bir işçi çalıştırıldığında, ben bu yüzden sadece bu işçi çalıştırmak olacaktır bu toplu işaretlemek için bir yol gerekir.

Bu çalışırken yeni satırlar eklenir sonra ben başka bir işçi başlatmak için seçerseniz ve, çalışabilirsiniz.

2 Cevap

Şu anda satır işleme işçi kimliği için tablo kuyrukta bir alan adamak.

First do update queue set worker_id = myid Where worker_id = '' LIMIT 100 Then select * from queue where worker_id = myid and process those rows. After all remove these rows from queue or mark them as processed.

O geri'' için worker_id ayarlayarak onun işlenmemiş satırları kilidini işlerken işçilerin biri öldüğünde durumu kapsayacak fall-back çeşit gerekebilir.

Kamil iyi bir cevabı vardır. Ben işçi bir seferde sadece tek bir satır olsun önererek uzanacak. Bu şekilde sıra bu orijinal düzeni daha yakından işlenecektir; ortada operasyonlar gerçekten veritabanından bir satır alınıyor göre uzun zaman alır ve eğer, o zaman bir seferde birden fazla almak gerekmez.

Bu da bir işçi öldü eğer daha kolay kontrol etmek için yapar. Her işçi sadece herhangi bir zamanda bir görev olabilir beri.

Ben 250,00 görüntülerin her hafta sonu üzerinde imagemagick işleme çalışan makineleri bir grup ile böyle bir sistemi uygulanmaktadır. Yapmak ve iş yükü arttıkça, onları ateşlemek için hiçbir şey yoktu (işler geldi o zaman) Sonra haftasında işçileri kapatabilir. Şampiyon gibi çalıştı.