我的代码类似于下面的代码(它的示例代码)。使用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 ) {
}
}
答案 0 :(得分:2)
基于对该包的源代码的初步看法,Guzzle客户端正在使用Doctrine的文件系统缓存。参考文献:
Bundle文档还提供了有关Caching的信息。因此,理论上要删除/禁用缓存,您只需从<argument type="service" id="misd_guzzle.cache.filesystem"/>
MyBundle/Resources/config/services.xml
的引用即可。