脚本宝典收集整理的这篇文章主要介绍了php – 如何在pcntl_fork之后将我的mysql连接保留在父进程中?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
在PHP中,当您使用pcntl_fork时,所有用MysqL_connect创建的连接都会被复制,这有点问题 – php docs和SO question.在这种情况下,常识是关闭父连接,创建new并让孩子使用旧连接.但如果说父母需要创造许多孩子几秒钟呢?在这种情况下,您最终会创建大量新连接 – 每一个叉子一个.
这在代码中意味着什么:
while (42) { $db = MysqL_connect($host,$user,$pass); // do some stuff wITh $db // ... foreach ($jobs as $job) { if (($pid = pcntl_fork()) == -1) { continue; } else if ($pid) { continue; } fork_for_job($job); } MysqL_close($db); wait_children(); sleep(5); } function fork_for_job($job) { // do something. // does not use the global $db // ... exit(0); }
好吧,我不想这样做 – 那就是与数据库的连接太多了.理想情况下,我希望能够实现与此类似的行为:
$db = MysqL_connect($host,$pass); while (42) { // do some stuff with $db // ... foreach ($jobs as $job) { if (($pid = pcntl_fork()) == -1) { continue; } else if ($pid) { continue; } fork_for_job($job); } wait_children(); sleep(5); } function fork_for_job($job) { // do something // does not use the global $db // ... exit(0); }
你认为有可能吗?
其他一些事情:
>这是PHP-cli脚本
>我在第一个例子中尝试过使用MysqL_pconnect,但据我所知,没有区别 – MysqL服务器接收到新的连接数.也许那是因为它是cli和pconnect不能像在mod_PHP中那样工作.正如Marc注意到的那样 – 在PHP-cli中连接是没有意义的.
您应该问问自己是否真的需要为工作进程建立数据库连接.为什么不让父进程获取数据并将结果写入文件?
如果确实需要连接,则应考虑使用其他语言来完成工作. PHPs cli本身不是一个“典型的”用例(它在4.3中添加),而且多处理比支持的功能更像是一个hack.
以上是脚本宝典为你收集整理的php – 如何在pcntl_fork之后将我的mysql连接保留在父进程中?全部内容,希望文章能够帮你解决php – 如何在pcntl_fork之后将我的mysql连接保留在父进程中?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。