php生成多个方案报告,使用PHP生成多个进程来处理数据.

我有一个需要处理的数据队列(Amazon SQS),我想用多个进程(用PHP)来完成.

我希望童工做这样的事情(pseduoish代码):

while(true) {

$array = $queue->fetchNItems(10); // get 10 items

if(!count($array))

killProcess();

foreach($array as $item) {

... // process the item

$queue->remove($item);

}

sleep(2);

}

我总是需要一个子进程来运行,但是在需要的时候我想(fork?)一个子进程,以便它可以帮助更快地处理队列.

有人可以帮我解决我需要的粗略的PHP骨架,还是指向正确的方向?

解决方法:

当你分叉一个进程.你复制了那个过程.换句话说,副本(fork)包含原始进程具有的所有内容(包括文件句柄)

那你怎么知道你是父母还是分叉的过程?

链接页面中的示例非常清楚地显示了这一点

$pid = pcntl_fork();

if ($pid == -1) {

die('could not fork');

} else if ($pid) {

// we are the parent

pcntl_wait($status); //Protect against Zombie children

} else {

// we are the child

}

?>

将此扩展到您想要的

$pid = pcntl_fork();

if ($pid == -1) {

die('could not fork');

} else if ($pid) {

// we are the parent

pcntl_wait($status); //Protect against Zombie children

} else {

// we are the child

while(true) {

$array = $queue->fetchNItems(10); // get 10 items

if(!count($array)) {

exit();

}

foreach($array as $item) {

... // process the item

$queue->remove($item);

}

sleep(2);

}

}

?>

这将在分叉进程上创建(在此实例中浪费)使用循环来创建多个进程.当孩子完成退出后会杀死孩子的过程.并且pcntl_wait()将返回允许父级继续.我不确定php,但如果父进程死亡或退出,它将终止子进程,即使子进程没有完成.因此pcntl_wait.如果你产生多个孩子,则需要更复杂的系统.

也许而不是分叉你应该看一下exec函数的范围?

一个警告.

分叉过程可能会出现问题,数据库句柄会在子项退出时关闭等.如果出现问题,您还可以使用多个进程终止服务器.花很多时间玩,测试和阅读.

DC

标签:php,process,fork

来源: https://codeday.me/bug/20190705/1385602.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值