2011-02-02 18 views
6

PCntl_fork'un WAMP'ta çalışması için bir yol var mı? Forking çözümü geliştirmem ve yerel olarak test etmem gerekiyor.WAMP ve pcntl_fork

+1

. Eğer cesaretiniz varsa (ve eğer hala mevcutsa) başka bir şey de w32api uzantısıyla bir şeyler elde edebilirsiniz. – mario

cevap

10

Hayır, bu mümkün değil. PCNTL uzantısı, * nix platformları gerektirir.

Şimdi, bununla birlikte, ne yapmaya çalışıyorsunuz, ve bunu çözmeden çözebilir misiniz ...?

Düzenleme: başlatılması arka plan süreçlerine Bazı alternatifler:

+1

Eşzamanlı işlemlerin çalışmasına ihtiyacım var. Ben cron kullanarak (ve çalışan süreçlerin sayısını yönetmek için DB kullanarak) uygulayabilirsiniz. Ancak, 10 eşzamanlı işlemin çalışmasını istediğimi varsayalım, 10 sayfalık tüm komut dosyalarını çalıştırabilmek için belirli bir betiği 10 kez (1 dakikalık artışlarla) çağırmak için cron'a ihtiyacım var (yani, 10 dakika önce İstenen eş zamanlı script sayısını elde ediyorum). Alternatif olarak, "kukla" işlevlerim aynı betiği çağırır (örn. Foo_1 foo çağrıları, foo_2 çağrıları foo, vb.) Ve her dakika cron çağrı foo_1, foo_2, vb. Kludgy gibi görünüyor. – StackOverflowNewbie

+1

@Stack: Arka plan görevlerini başlatmanın birden fazla yolu var. İşlemleri kesmek için linux üzerinde 'nohup 've' & 'kullanabilirsiniz veya COM WScript: http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx object arka plan görevlerini başlat ... – ircmaxell

+0

@Stack: cevabı düzenledim – ircmaxell

-1

sözde kod çözümü:

argümanlar hakkında ayrıntılı bilgileri
$com = new Com('WScript.shell'); 
$com->run('php yourscript.php', 10, false); 

, bkz Bu zaten yanıtlandı

while (TRUE) 
{ 
    $process_limit = get_process_limit(); 
    $process_count = get_process_count(); 

    if process count < process limit: 
    { 
     // get_row returns a row (as an array) from the DB that needs to be processed 
     $row = get_row(); 
     if($row === array()) 
     { 
     // Nothing to process; sleep 
     sleep(2); 
     } 
     else 
     { 
     // Process row 
     process_count(+1); 
     process_row($row); 
     process_count(-1); 
     } 

    } 
    elseif process count === process limit 
    { 
     // Do not add to the process 
     exit; 
    } 
    elseif process count > process limit 
    { 
     // Means the process limit was decreased 
     // Terminate this process instance 
     process_count(-1); 
     exit; 
    } 
} 
-1

ama benim 2p eklemek düşündüm .

Windows'ta php ile pcntl-fork'u cygwin kullanarak alabilirsiniz.

Yüklemek gerçek bir acı, ancak benden hoşlanıyorsanız, sadece bir php cli betiğinin çalışması için en iyi seçimdir.

ben here talimat var:

Sen/çalıştırmak PCNTL işlev olasılığı daha yüksektir Cygwin, altında derlemeye deneyebilirsiniz
İlgili konular