PHP: değeri döndüren bir işlev Engellenir?

6 Cevap php


How could I make sure that the startProcess(); function is being called, but without halting the execution for myFunction(). I'll guess that there's a way to call a function and prevent it from returning it's value to thereby accomplishing this?

Pseudo-kod:

function myFunction() {

    startProcess();

    return $something;       
}

function startProcess() {
    sleep(5);
    // Do stuff that user doesn't should have to wait for.
}

6 Cevap

Bunu yapamazsınız. Uyumsuz I / O, ancak ihtiyaç eşzamanlılık gibi bir şey izin PHP bazı birkaç fonksiyonlar vardır.

Hiçbir dil desteği mevcut nedeni eşzamanlılık HTTP daemon tarafından yönetilen ise PHP, kısa ömürlü komut yürütmek için tasarlanmış olmasıdır.

Ayrıca bkz:

Artefecto cevabı için küçük bir ek yapmak için, konuları durumun bir tür yeniden teşebbüs ettik bazı insanlar var. Bunu google kullanarak bunun üzerine bazı bilgiler bulabilirsiniz, ama ben sadece çok deneysel ve muhtemelen oldukça güvenilmez gibi yararlı olacak şüphesiz.

Sizin için yararlı olabilecek bir bağlantı bulundu.

Bildiğim kadarıyla sizin soru ve etiketleri söyleyebilirim, bazı arka plan işleme, anlamı, aslında, birden çok iş parçacığı yapmak istiyorum.

Ne yazık ki, PHP bu yapmaz. Orada uyumsuz bazı IO işlevleri vardır, ancak genel olarak PHP eşzamanlı işlem yapamaz.

Bu ne edersiniz startProcess () istiyorsun? Beklemek zorunda kullanıcı tutmak için birçok yol vardır.

E-postalar iyi bir örnektir: ileti kabul ya da reddedilir kadar () spin mail çalışan diş; Bir kullanıcı bunun için beklemek zorunda istemiyorum. Yani görevi sıraya, ve sonra cron üzerinde kuyruğunu işlemek.

function myFunction() {
    addToQueue();
    return $something;       
}

function addToQueue() {
    // add stuff to the queue of tasks
}

function runQueue() {
    // process the queue of tasks; called by cron.
}

Eğer arka plan görevi bu türlü tarım için Gearman baktınız mı?

Ben burada karanlıkta bir çekim için gidiyorum, ama bu genel amaç için bir çözüm olabilir gibi bu fonksiyon benziyor?

http://php.net/manual/en/function.register-shutdown-function.php