我试图在多个进程中运行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
...
)
)
答案 0 :(得分:0)
Php fork(比如NIX中的fork)这只是进程的完整副本和她的环境。父进程不知道儿童的变化。孩子们不能把结果传给父母。 Parent只能检查子进程的结束。如果要传递数据,可以使用共享内存。但要注意! php中的共享内存这不是真实的(OS)共享内存。但是对于php它可以工作。
您可以在此处找到解决方案:https://github.com/search?q=php+fork