У меня есть код, похожий на то, что ниже (это пример кода). Используя Guzzle, я делаю несколько вызовов на одном сайте, чтобы узнать, существует ли документ. Если документ существует, я сохраняю его. Когда я делаю каждый звонок, использование памяти увеличивается. В конце концов, если количество запросов достаточно велико, у меня заканчивается память. Я использовал memory_get_peak_usage
для отслеживания использования памяти, и это клиент Guzzle.Как сбросить клиент Guzzle и очистить кешированные значения (использование памяти)
Код работает, как ожидалось, но я не могу найти способ сообщить клиенту Guzzle «сбросить и сбросить все предыдущие запросы». Я уверен, что он кэширует результаты в памяти, но, как я написал их в файл, я знаю, что мне не нужны указанные результаты. Как сбросить их?
FWIW, мое текущее решение создает новый клиент, дублирующий параметры исходного и периодически отменяя его. Он работает, но он уродлив.
$client = new \Guzzle\Http\Client('some_url');
for ($i=0; $i<10000; $i++)
{
try {
$pdf = $client->get($pdf_name)->send();
$this->filesystem->put(
$pdf_name,
$pdf->getBody(true)
);
} catch (ClientErrorResponseException $ex) {
}
}
Вы ограничены использованием Guzzle v3 или можете ли вы использовать v5? Были некоторые значительные архитектурные изменения, сделанные под капотом. в v4 и v5 –
Даже не подумал проверить. Guzzle добавляется через https://packagist.org/packages/misd/guzzle-bundle, поэтому мне нужно будет поработать, если мы сможем обновиться. Но это дает мне возможность начать искать. Благодарю. –
Чтобы следить за моим оригинальным вопросом, ваша ошибка проявляется в контексте приложения Symfony Framework? Являются ли ваши проблемы воспроизводимыми из тестового приложения (например, ваш образец кода)? Кроме того, что такое $ this-> файловая система? Является ли это экземпляром Symfony \ Component \ Filesystem? –