2010-09-01 21 views
5

Eşzamanlı olarak ayrı işlemler olarak çalıştırılması gereken birkaç komut dosyası var. Planım, belirli bir aralıkta bu komut dosyalarının birden çok örneğini yürüten bir cron işine sahip olmaktır. Bu iyi bir fikir mi? Bu yaklaşımın artıları/eksileri nelerdir? Düşünmem gereken başka seçenekler var mı?PHP Cron ile eşzamanlılık

Bottomline: Ben çoklu taklit etmeye çalışıyorum. Herhangi bir yarış koşulları, kod aracılığıyla ele alınacaktır (örneğin, DB'deki vb. Durumları belirleme). Komut dosyalarının yoğun görevleri (örneğin, küçük resimler oluşturma, vb.) Gerçekleştirmesi gerekiyor.

cevap

5

Sen ayrılmasının kullanabilirsiniz. Başlangıç ​​betiği tüm varsayılan yapılandırmaları ve başlatmaları yükler, daha sonra işlem yapmak için alt süreçleri çatallar. Daha sonra hala çalışıp çalışmadıklarını görmek için işlemleri izleyebilir. http://php.net/manual/en/function.pcntl-fork.php

0

değil PHP fork() var mı? Bu gerçekten çok iş parçacıklı olmasa da, ortak rutinler için temel bir yoldur. Eğer bir cronjob olarak gerekirse

2

Eh, durma. Birden çok işlem istiyorsanız, büyük olasılıkla aynı betiğin birden çok örneğini oluşturmak için pcntl_fork'u kullanmak istersiniz.

1

sizin de işlenirken bir kuyruk sistemi kullanılarak ortaya yayılabilir sonra işlemci yoğun görevler yapmak arıyorsanız eğer bu işlerin tepki istediğiniz kadar hızlı bağlı olarak ve. Birden çok çekirdek/işlemci varsa, makine başına birden çok çalışanla Gearman veya beanstalkd'a bakın. cron'u kullanmanın

0

Bir con o ne olursa olsun kaç komut işlemleri zaten çalışan set aralıklarla e senaryonun bir kopyasını çalıştırır olmasıdır. Bu, komut dosyalarının birbirleriyle iletişim kurmanın bir yoluna ihtiyaç duydukları anlamına gelir, böylece maksimum N komut dosyası aynı anda çalışır durumda kalır (fazla komut dosyaları hemen çıkarılabilir).

Cron'a bir alternatif supervisord olabilir; bu yapılandırılabilir bir sayıda betiği çalıştırabilir ve her birini izleyen herhangi bir çıkışa yeniden yakalanacaktır.