2010-07-26 66 views
0

我目前运行在一个PHP脚本这些行:运行PHP的exec()异步/多进程

foreach ($list as $route) 
{ 
    exec('php-cgi ./nextbus-route_stop_predictions.php route=' . $route['route_id']); 
} 

nextbus-route_stop_predictions.php大约需要15秒的运行和exec()是跑来跑去12次。我想知道PHP是否能够运行这些命令行而无需等待前一个exec()的输出。所以基本上,我想运行这个异步/多进程。

更新

对于任何人还在寻找答案,我用nohup和管道输出到/dev/null

回答

3

pcntl_fork()可能能够帮助如果你在* nix。

pcntl_fork()函数创建一个子进程,它仅在其PID和PPID中与父进程不同。请参阅系统的fork(2)手册页,以获取有关fork如何在您的系统上工作的具体细节。

+0

我已经使用了很多次,并且必须说如果你的工作是高度并行的(意思是你不需要进程间的通信或同步),那么它工作得非常好。我用它一次解析大约500个XML文件(每个大约1GB)。我简单地为每个进程分配一个子进程(当然,使用进程池),让它运行单元它退出... – ircmaxell 2010-07-26 23:14:03

+0

不完全确定这是如何运行的,但是在我的for循环中,我只是$ pid = pcntl_fork()吗? – 2010-07-26 23:51:15