1

複数のプロセスで 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
            ...
        )

)
4

1 に答える 1