ThinkPHP 使用 PHP pcntl_fork 实现多进程的坑

2018-09-0509:37:31后端程序开发Comments3,889 views字数 1166阅读模式

实现一个功能:根据卡号去第三方平台获取卡的详细信息,但是由于第三方相应速度比较慢(一张卡大概3S),在批量操作的时候,响应就会很慢,所以想到使用多进程去操作文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/4432.html

具体代码如下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/4432.html

其中需要注意的几个坑:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/4432.html

1、如果在ThinkPHP中使用多进程,切勿在子进程中连接数据库,会出现gateway timeout错误,导致子进程终止,执行失败。引起原因为ThinkPHP在操作数据库后,没有主动关闭连接,导致连接超时无法连接数据库,解决办法,自己写数据库连接代码,操作完之后,mysql_close($conn)关闭连接文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/4432.html

2、在子进程中的变量,使用完之后,务必记得unset()注销变量,否则造成内存溢出文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/4432.html

3、子进程执行完毕之后,需要exit(0)退出程序,否则子进程无法退出,造成僵尸进程,占用系统资源。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/4432.html

其他事项,具体开多少个子进程,视自己业务和服务器配置决定,不是越多越好,数量太多,会造成系统资源耗尽,造成web服务器无法访问文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/4432.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/4432.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定