2011-03-15 25 views
7

Sorun özeti: Eşzamanlı kullanım maliyetiyle, yüklendikten sonra resimlerin basılmasını büyük ölçüde hızlandırmayı başardım. Şimdi bu eşzamanlılığı bir yarış koşuluna karşı korumalıyım. Bağımlı senaryonun bağımsız dosya statüsü için normal dosyaları yoklaması gerekiyordu, ama daha sonra adlandırılmış boruların daha iyi olacağına karar verdim. Yoklamalardan kaçınmak ve adlandırılan borular, onları açan komut dosyasından bir PID alamıyorum (bu, konuşmak için boruları kullanmam gerekir).Adlandırılmış engellenmeyen borular

Bir resim yüklendiğinde, istemci bir komut dosyasına AJAX yoluyla bir POST gönderir. 1) görüntüyü kaydeder 2) görüntüyü kopyalamak için paralel bir komut dosyası (bağımsız) oluşturur ve 3) görüntü hakkında JSON değerini döndürür. müşteri. İstemci hemen ardından, gönderilen yanıtı hazırlarken hazırlayacağımız ümit verici bir şekilde, basılmış versiyonu talep ediyor. Ancak, eğer hazır değilse, Apache mod_dosyası, ikinci bir betikte (bağımlı) işaret ederek, başlığın tamamlanmasını bekler ve görüntü verisini döndürür. terminal aracılığıyla tek başına bağımsız senaryoyu test ederken

Ben, bu oldukça basit olması bekleniyor, ama, bu alın:

$ php -f thumb.php -- img=3g1pad.jpg 
successSegmentation fault 

kaynak buradadır: http://codepad.org/JP9wkuba Ben o Fifo çünkü segfault olsun şüpheli Yaptığım şey hala açık ve şimdi yetim. Ama görmeye bağımlı senaryo için ihtiyacım var, değil mi? Ve engellenmemesi gerekiyor mu? Sanırım, betiğin geri kalanı çalıştırabilir ... ama bitiremez mi? Bu, başlangıçta düşündüğüm gibi normal bir dosya için bir iş olurdu, her ikisi de açık değilse, yoklama yapmak istemiyorum. En çok bir kez anket yapmak ve onunla birlikte yapmak istiyorum. Çocuğun yokluğunu görmezden gelmem gerekiyor mu?

+3

Bu sorunun doğrudan sorunuzu yanıtlayamayacağını anlıyorum, ancak neden bu * inanılmaz bir tuhaf yolu seçtiniz? [İş/mesaj kuyruğu gibi bir Gearman kullanmak yerine] (http://gearman.org/)? – Charles

+0

@Charles: Hm, Bunu duymuştum ama ne yaptığını tam olarak bilmiyordum. Ama şu anda öğrenmek için henüz başka bir API'ye ihtiyacım yok. – Grault

+8

Endişelenmeniz gereken 2-4 yöntemleri, kendinizi içinde bulunduğunuz çarpışma-adı verilen boru kuyruğundan çıkarmanız için gereken çabaya kıyasla öğrenmeniz önemsizdir. işlerken] (http://www.php.net/manual/en/gearmanjob.sendstatus.php), burada sizin için iyi bir durum var gibi görünüyor. (Durum bilgisi gönderme işlemi aslında iş alma sürecinin karmaşıklığını önemli ölçüde artırır - yangın-ve-unut/yangın-bekle-yangın-ve-döngü-süre-işleme-bayraklarına gider.) – Charles

cevap

1

Oluşturulan FIFO dosyalarını silmeniz ve ardından tüm komut dosyalarını tamamlamanız gerekir.

İlgili konular