Закрытие соединения MySQL во время параллельных задач Cron - PullRequest
1 голос
/ 10 июня 2011

Я написал службу cron на основе Zend Framework для параллельных задач на основе этих двух статей в блоге:

Таким образом, службы cron используют pcntl_fork() для параллельного запуска задач.

Запуск одной задачи с сервисом работает без проблем, но когда я добавляю вторую задачу, я получаю эту ошибку MySQL:

Общая ошибка: сервер MySQL 2006 пропал

Мое лучшее предположение заключается в том, что дочерний поток заканчивается раньше другого, и соединение MySQL неявно закрывается. Если это так, как я могу гарантировать, что соединение остается открытым до тех пор, пока родительский поток не закроется?

1 Ответ

1 голос
/ 10 июня 2011

После прочтения комментариев pcntl_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);
...