我正在尝试跨多个进程运行 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
数组应该包含四个项目,这些项目也是每个包含一百万个项目的数组。它应该如下所示:
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
...
)
)