我想實現我的工作人員的並行執行,並且我使用ReactPHP
來幫助我。 https://github.com/reactphp/reactReactPHP阻塞在一個循環內
但我沒有得到我期望得到的行爲。
場景:
我有三名工人。
fetch.php
parse.php
notify.php
fetch.php
和notify.php
不具備prerequired運行條件,使他們能夠並行運行,應該首先運行。
parse.php
需要等待fetch.php
完成工作,然後它應該執行。
所以我有我的父母腳本process.php
所有的魔法發生。
$tasks = ['fetch', 'notify'];
forkProcess($tasks);
function forkProcess($tasks)
{
if (empty($tasks)) return false;
$loop = React\EventLoop\Factory::create();
foreach ($tasks as $task) {
$process = new React\ChildProcess\Process("php $task.php");
$loop->addTimer(0.001, function($timer) use ($process, $task) {
$process->start($timer->getLoop());
$process->stdout->on('data', function($output) use ($task) {
echo $output;
$subTasks = getDependentTask($task);
forkProcess($subTasks);
});
});
}
$loop->run();
}
function getDependentTask($task)
{
if ($task != 'fetch') return [];
return [
'parse'
];
}
因此,而不是得到這個輸出:
FETCH
NOTIFY
PARSE
我越來越
FETCH
PARSE
NOTIFY
而腳本等待分析完成,然後進入下一個任務是通知。
所以我做錯了什麼,因爲我第一次玩ReactPHP可能是一些菜鳥的錯誤。
是我使用遞歸,並阻止循環或別的東西的問題。
也許循環沒有實現來解決這種問題,我試圖解決?