在一个foreach循环中的PHP pcntl_fork

时间:2013-01-10 01:02:52

标签: php multithreading

我有一个for循环是从一个大约60,000个字符串的数组运行,从一个文件中读取 对于这些字符串中的每一个,我想运行一个以字符串作为参数的小python文件。 为了加快速度,我的计划是将每个执行作为一个单独的线程运行。 我尝试了以下但这意味着每个孩子都进行了完整的foreach循环。

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

如何让每个名称作为单独的线程运行?但是没有继续主要的foreach循环?

2 个答案:

答案 0 :(得分:1)

请参阅https://stackoverflow.com/a/45966/1964163 - 但如果您真的想使用pcntl_fork,则需要检查其返回值以查看您是否是子进程。 pcntl_fork的PHP文档页面上有示例代码。

答案 1 :(得分: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.
    }
}