Eh, ben şimdi ben buna iyi bir cevap bulduk düşünüyorum, bu soru yayınlanmıştır.
Eğer Net_Gearman_Worker için kod bakarsanız, iş döngü içinde, fonksiyon stopWork izlenir göreceksiniz, ve true döndürür, bu işlevi çıkar.
I did the following:
Using memcache, I created a cached value, gearman_restarttime, and I use a separate script to set that to the current timestamp whenever I update the site. (I used Memcache, but this could be stored anywhere--a database, a file, or anything).
Ben İşçi sınıfı, aslında, Net_Gearman_Worker_Foo olmak için genişletilmiş ve benim işçilerin tüm bu örneğini vardı. Foo sınıfında, ben aşağıdakileri yapmak stopWork işlevini overrode: birincisi, gearman_restarttime denetler; ile ilk kez, bir genel değişken değeri kaydeder. O andan itibaren, her zaman aracılığıyla, bu global önbelleğe değerini karşılaştırır. O değişti, stopWork true döndürür ve işçi sonlandırılıyor. Bir cron her işçi hala çalışıyorsa görmek için her dakika denetler ve çıkıldı herhangi bir işçi yeniden başlatır.
Bir de stopWork bir zamanlayıcı koyarak, ve sadece bir kez, her x dakikada bir önbelleğini kontrol değerinde olabilir. Bizim durumumuzda, Memcache değerleri her zaman kontrol bir sorun görünmüyor yeterince hızlı, ama daha az sık sık kontrol, geçerli zaman damgası kapalı saklamak için başka bir sistem kullanıyorsanız, daha iyi olurdu.