2013-01-10 145 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