php 多进程使用一个数据库连接插入数据出错怎么解决??
代码:
// 一个数据库连接
// 供应近百个进程并行使用
// 结果导致,只有第一个创建的进程插入了数据
// 后面的进程全部无法插入数据到数据库
// 提示 MySQL server has gone away
$con = new PDO('mysql:host=127.0.0.1;dbname=Process' , 'root' , '364793');
$num = 50 * 10000; // 插入的数量
$tb_name = 'test_tb';
$sex_range = array("男" , "女" , "两性" , "未知" , "male" , "female" , "both" , "unknow");
$sex_range_count = count($sex_range);
$unit_num = 5000; // 单次插入数量
$p_list = array();
$p_num = ceil($num / $unit_num);
$is_main_process = true;
$file = '/home/cxl/桌面/insert.log';
// 清空插入日志(以便重新计算插入耗费时间)
$fs = fopen($file , 'w');
fwrite($fs , '');
fclose($fs);
for ($n = 1; $n <= $p_num; ++$n)
{
$min = ($n - 1) * $unit_num;
$max = min($min + $unit_num , $num);
// echo 'per insert number: min->' . $min . ' ; max->' . $max . PHP_EOL;
$p = pcntl_fork();
if ($p === -1) {
exit('create process ' . $n . ' failed!' . PHP_EOL);
} else if ($p === 0) {
$is_main_process = false;
$sql = 'insert into ' . $tb_name . ' (name , sex , height) values ';
for ($i = $min; $i < $max; ++$i)
{
// name
$name = join('' , random(10 , 'mixed'));
// sex
shuffle($sex_range);
$sex = $sex_range[rand(0 , $sex_range_count - 1)];
// height
$height = rand(50 , 175);
$sql .= '("' . $name . '" , "' . $sex . '" , ' . $height . ') ,';
}
$sql = mb_substr($sql , 0 , -1);
// 每批次插入开始时间
$s_time = microtime(true);
if (!$con->query($sql)) {
exit('插入批次:' . $n . ' 失败' . PHP_EOL);
}
// 每批次插入结束时间
$e_time = microtime(true);
// 每批次插入耗费的时间
$duration = $e_time - $s_time;
// 输出信息
echo '插入批次 ' . $n . ' 花费时间: ' . $duration . 's' . PHP_EOL;
// 记录每次插入耗时(用于统计总耗时)
$fs = fopen($file , 'a');
fwrite($fs , $duration . "\r\n");
fclose($fs);
break;
} else {
$p_list[] = $p;
}
}
结果:
相关阅读:
为什么sublime text 3里面的settings不能修改?
js “+ - ”怎么理解
Visual Studio中当鼠标指针移动到类型名称上时所出现的提示气泡,其键盘快捷键是什么?
vue2在window环境下源代码调试报错
promise中then函数中的resolve和reject的如何理解
react antd 如何删除数组中指定的元素?
weexpack 打包的安卓或IOS应用 后期是如何做自动更新的?
log4j日志打不出来
如何用moment实现期望时间与当前时间之间的天数?
用windows server2008做Java后台的服务器,通过远程连接来连接服务器后,为什么无法从本地复制文件到服务器?
Win 下 Python WEB 部署有什么好的工具吗?
标题一句话太难,求过往英雄进来细看。
app与设备进行socket 连接后, 设备切换了信道,这时socket会断开吗
JPA 问题出错
微型小程序 调试当前页面 刷新不跳转
如何实现跨域名免输密码登录?
lodash里的_.delay(func, wait, [args])和setTimeout有区别吗?
ng-table title 没了!!!!
ubantu1.4下apt-get无法安装应用
smarty foreach如何循环二维数组