私はワーカーの並列実行を実現しようとしていますが、ReactPHP
私を助けるために使用しています。https://github.com/reactphp/react
しかし、私が期待している動作が得られません。
シナリオ:
私には3人の労働者がいます。
fetch.php
parse.php
notify.php
fetch.php
notify.php
実行するための前提条件がないため、並行して実行でき、最初に実行する必要があります。
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を初めていじっているので、おそらく初歩的な間違いです.
私が再帰を使用していて、それがループなどをブロックしているという問題です。
私が解決しようとしているこの種の問題を解決するためにループが実装されていないのでしょうか?