php多进程数据库异常,php,pcntl_php 多进程使用一个数据库连接插入数据出错怎么解决??,php,pcntl,ubuntu - phpStudy...

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如何循环二维数组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值