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