如何重置Guzzle客户端并清除任何缓存的值(内存使用情况)

时间:2015-04-08 11:26:59

标签: php guzzle

我的代码类似于下面的代码(它的示例代码)。使用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 ) {

        }
    }

1 个答案:

答案 0 :(得分:2)

基于对该包的源代码的初步看法,Guzzle客户端正在使用Doctrine的文件系统缓存。参考文献:

Bundle文档还提供了有关Caching的信息。因此,理论上要删除/禁用缓存,您只需从<argument type="service" id="misd_guzzle.cache.filesystem"/>

的addSubscriber部分删除对MyBundle/Resources/config/services.xml的引用即可。