我已经根据这两篇博客文章为并行任务编写了一个基于 Zend Framework 的 cron 服务:
总而言之,cron 服务使用 pcntl_fork()
并行生成任务。
使用该服务运行单个任务没有问题,但是当我添加第二个任务时,出现此 MySQL 错误:
General error: 2006 MySQL server has gone away
我最好的猜测是一个子线程先于另一个子线程结束并且 MySQL 连接被隐式关闭。如果是这种情况,我如何确保连接保持打开状态直到父线程关闭?
最佳答案
阅读关于 pcntl_fork()
的评论后还有这个SO question ,这确实是 child 共享父连接的问题。我已经添加了这段代码以在 fork 后创建一个新的 MySQL 连接,它似乎已经解决了这个问题:
// give this thread its own db connection
$settings = Zend_Registry::get('settings');
$db = Zend_Db::factory(
$settings->db_adapter,
array(
'host' => $settings->db_host,
'username' => $settings->db_user,
'password' => $settings->db_pass,
'dbname' => $settings->db_name,
)
);
$db->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Db_Table::setDefaultAdapter($db);
关于php - MySQL 连接在并行 Cron 任务期间关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309860/