我有类似于下面的代码(它是示例代码)。使用 Guzzle,我多次调用同一个站点以查看文档是否存在。如果文档存在,我会保存它。每次调用时,内存使用量都会增加。最终,如果请求数量足够多,我就会耗尽内存。我使用 memory_get_peak_usage
来跟踪内存使用发生的位置,它是 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 客户端正在使用 Doctrine 的文件系统缓存。引用:
Bundle 文档还提供了有关 Caching 的信息。因此,理论上要删除/禁用缓存,您所要做的就是从
<argument type="service" id="misd_guzzle.cache.filesystem"/>
的 addSubscriber 部分删除对 MyBundle/Resources/config/services.xml
的引用关于php - 如何重置 Guzzle 客户端并清除任何缓存值(内存使用情况),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29513322/