foreach循环中的PHP pcntl_fork

foreach循环中的PHP pcntl_fork,php,multithreading,Php,Multithreading,我有一个for-each循环,它从一个文件读取的大约60000个字符串数组中运行 对于这些字符串中的每一个,我都希望运行一个小python文件,并将该字符串作为参数。 为了加快速度,我的计划是将每个执行作为单独的线程运行。 我尝试了下面的方法,但这意味着每个孩子都进行了完整的foreach循环 foreach($namesas $name) { pcntl_fork(); echo ++$count."\n"; exec("python script.py -argume

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

foreach($namesas $name)
{
    pcntl_fork();
    echo ++$count."\n";
    exec("python script.py -argument:".$name);
}
如何使每个名称作为单独的线程运行?但是不继续使用主foreach循环吗?

请参见--但是如果您真的想使用pcntl\u fork,则需要检查其返回值以确定您是否是子进程。PHP文档页面上有pcntl_fork的示例代码。

pcntl_fork()
创建脚本的副本,该副本与父脚本处于同一执行点,正如您所注意到的

您可以通过检查
pcntl_fork()
的返回来检查此脚本是父脚本还是子脚本:


……然而,我想补充一点:你正在制造一个线程炸弹。您可能希望将自己的并发进程数限制在60000以下。@asmecher-我们如何将其限制在60000以下?您可以使用pcntl_waitpid()并对循环进行编码,以便一次运行的线程数不超过少数。但你可能会找到一个图书馆,为你做这项工作,而不是重新发明轮子。
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.
    }
}