2013-01-10 142 views
0

我對每個循環都有一個從一個文件中讀取的大約60,000個字符串的數組運行 對於這些字符串中的每一個,我想運行一個帶有字符串作爲參數的小型python文件。 爲了加快速度,我的計劃是將每個執行作爲一個單獨的線程運行。 我嘗試了下面,但這意味着每個孩子進行完整的foreach循環。在一個foreach循環中的PHP pcntl_fork

foreach($namesas $name) 
{ 
    pcntl_fork(); 
    echo ++$count."\n"; 
    exec("python script.py -argument:".$name); 
} 

如何讓每個名稱作爲單獨的線程運行?但不能繼續主foreach循環?

回答

0

pcntl_fork()創建一個腳本的副本,它與父代處於相同的執行位置,正如您已經注意到的那樣。

您可以檢查,看看這個腳本是家長或通過檢查pcntl_fork()回孩子:

foreach($namesas $name) 
{ 
    $pid = pcntl_fork(); 
    if(!$pid){ 
     //We are the child 
     echo ++$count."\n"; 
     exec("python script.py -argument:".$name); 
     break;//Jump out of loop in this child. Parent will continue. 
    } 
} 
1

請參閱https://stackoverflow.com/a/45966/1964163 - 但如果您確實想使用pcntl_fork,則需要檢查其返回值以查看您是否是子進程。有關pcntl_fork的PHP文檔頁面上有示例代碼。

+1

...然而,想增加:你已經得到了正在醞釀中的threadbomb。您可能希望將自己限制爲少於60,000個同步進程。 – asmecher

+0

嘿,好點。我錯過了一些東西。 – Jim