社区
基础编程
帖子详情
pcntl多进程 mysql has gone away
szzfl
2012-03-01 08:51:56
如题,用pcntl产生多进程,数据库连接生成器是单例,父子进程间很容易出现mysql has gone away的现象,不知道有没有经验的人碰过这样的问题。
...全文
171
8
打赏
收藏
pcntl多进程 mysql has gone away
如题,用pcntl产生多进程,数据库连接生成器是单例,父子进程间很容易出现mysql has gone away的现象,不知道有没有经验的人碰过这样的问题。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
coder
2012-03-02
打赏
举报
回复
[Quote=引用 6 楼 dream1206 的回复:]
http://blog.csdn.net/brightsnow/article/details/3997705
[/Quote]
主要是数据库的配置问题。
szzfl
2012-03-01
打赏
举报
回复
不管如何,谢谢你,我明天去公司也自己再研究一下。
改一下昵称
2012-03-01
打赏
举报
回复
http://blog.csdn.net/brightsnow/article/details/3997705
改一下昵称
2012-03-01
打赏
举报
回复
抱歉其实我也没有实际应用过pcntl做项目。。只能建议你google一下各种可能,等待高手
szzfl
2012-03-01
打赏
举报
回复
不好意思,忘了在子进程后面加个exit,不然父子进程会以深度交叉的方式循环运行,结果肯定死机,都是我的示范代码没写好的错。当然我要问的不是这个问题,还是那个mysql has gone away的问题。
while(true){
$db = system::getdatabase(); //获取数据库连接 单例
$records = $db->find();
foreach($records as $record){
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
} else {
//这里子进程处理可能会用到数据库连接 比方
$db = system::getdatabase();
$db->delete();
exit(0);
}
}
sleep(1);
}
改一下昵称
2012-03-01
打赏
举报
回复
我是觉得是连接数过多的原因,因为子执行完
$db = system::getdatabase();
$db->delete(); // 这个差不多是断开连接的操作吧?
还会返回while循环再走父走过的路,因此程序陷入了死循环。
我修改了部分代码试着运行了一下,结果悲摧的直接死机了
szzfl
2012-03-01
打赏
举报
回复
大致如:
while(true){
$db = system::getdatabase(); //获取数据库连接 单例
$records = $db->find();
foreach($records as $record){
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
} else {
//这里子进程处理可能会用到数据库连接 比方
$db = system::getdatabase();
$db->delete();
}
}
sleep(1);
}
会造成父或者子进程出现:mysql has gone away,如此中断。子的还好,父的话就会循环程序中断,跳出,因为我的数据库错误是向外抛错误的。
改一下昵称
2012-03-01
打赏
举报
回复
pcntl_fork()后再分别连接数据库还是?
php
pc
ntl
_fork
mysql
server has
gone
away
文章讲述了作者在开发PH
PC
LI
多进程
程序时遇到
MySQL
serverhas
gone
away
错误,通过排查发现是由于
mysql
_connect函数的新链接参数$new_link未设置为true,导致多个进程共用同一链接资源。设置$new_link为true后问题得到解决,同时讨论了Apache环境下的并发处理可能机制以及程序并行执行带来的性能提升。
pc
ntl
_fork 导致
MySQL
server has
gone
away
解决方案
本文介绍了一个关于使用
pc
ntl
_fork时遇到的
MySQL
连接问题,即子进程继承了父进程的数据库连接导致数据混乱的情况。文章详细阐述了解决方案:在调用
pc
ntl
_fork之前断开数据库连接,之后在每个进程中重新建立连接。
从【
MySQL
server has
gone
away
】说起
本文探讨了在PHP
多进程
环境中使用
MySQL
时遇到的“
MySQL
server has
gone
away
”错误。分析了错误产生的原因,主要是由于
mysql
_connect函数的$new_link参数未正确设置导致
多进程
共用同一连接资源引发的问题。
pc
ntl
_fork导致
Mysql
have
gone
away
问题解决
探讨在使用
pc
ntl
_fork进行进程分叉时,如何避免子进程关闭父进程
MySQL
连接的问题。介绍了一种解决方案,即在父进程中重新创建数据库连接,确保进程间的独立性。
php
多进程
pc
ntl
_fork导致
Mysql
have
gone
away
问题解决
本文介绍了如何在PHP中使用
PC
NTL
fork函数为每个子进程创建独立的数据库连接,确保数据独立性。示例展示了
MySQL
和
mysql
i_connect的用法,以及错误处理方法。,
基础编程
21,889
社区成员
140,333
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章