2010-07-26 183 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