我正试图在多个进程之间运行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
...
)
)
Php-fork(类似于NIX中的fork)这只是流程和环境的完整副本。父进程不知道子进程的更改。孩子们不能把结果传给家长。父进程只能检查子进程的末尾。如果您想要传递数据,可以使用共享内存。但请注意!php中的共享内存这不是真正的(操作系统)共享内存。但对于php来说,它是有效的。
您可以在此处找到解决方案:https://github.com/search?q=php+分叉