複数のプロセスで for ループを実行しようとしていますが、各 for ループが親プロセスの配列に書き込む必要があります。子プロセスを配列で終了しようとしましたがpcntl_wexitstatus()
、整数しか返せません。そして、私は立ち往生しています。
私はマルチプロセッシングに非常に慣れてshmop
いませんが、親と子の間で変数を共有するための良い解決策は .
これが私のコードです:
$output = array();
for ($i = 0; $i < 4; $i++) {
$pid = pcntl_fork();
$start = ($i == 0) ? 1 : (1000000 * $i) + 1;
$end = 1000000 * ($i + 1);
if (!$pid) {
for ($run = $start; $run <= $end; $run++) {
$output[$i][] = 'Run ' . $run;
}
exit($i);
}
}
while (pcntl_waitpid(0, $status) != -1) {
$status = pcntl_wexitstatus($status);
}
echo implode("\n", $output);
予想されることを明確にするために、$output
配列には 4 つの項目が含まれている必要があります。これらの項目は、それぞれ 100 万項目の配列でもあります。次のようになります。
Array
(
[0] => Array
(
[0] => Run 1
[1] => Run 2
[2] => Run 3
...
)
[1] => Array
(
[0] => Run 1000001
[1] => Run 1000002
[2] => Run 1000003
...
)
[2] => Array
(
[0] => Run 2000001
[1] => Run 2000002
[2] => Run 2000003
...
)
[3] => Array
(
[0] => Run 3000001
[1] => Run 3000002
[2] => Run 3000003
...
)
)