【发布时间】:2011-09-12 16:24:54
【问题描述】:
我根据这两篇博客文章为并行任务编写了一个基于 Zend Framework 的 cron 服务:
总之,cron 服务使用pcntl_fork() 来并行生成任务。
使用该服务运行单个任务没有问题,但是当我添加第二个任务时,我收到此 MySQL 错误:
一般错误:2006 MySQL 服务器已消失
我最好的猜测是一个子线程在另一个之前结束并且 MySQL 连接被隐式关闭。如果是这种情况,如何确保连接保持打开状态,直到父线程关闭?
【问题讨论】:
-
在你 fork() 之后连接到数据库。如果您在 fork 之前连接,则该连接由子级共享,并且 MySQL 不会为共享同一连接的多个进程设置。
-
分叉前的引导过程连接到数据库,而且必然如此。我一直在阅读php.net/pcntl-fork 上的 cmets,我得出的结论是我必须移除分叉。我希望有另一种方式。
-
你总是可以让孩子们启动一个新的连接。只是不要重复使用父级建立的任何连接。
-
@Marc B - 谢谢!当你写你的评论时,我正在输入那个解决方案。
标签: php mysql zend-framework cron pdo