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

Ste*_*ynn 5 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 ) {

        }
    }
Run Code Online (Sandbox Code Playgroud)

Sha*_*ley 2

根据对捆绑包源代码的粗略浏览,Guzzle 客户端正在利用 Doctrine 的文件系统缓存。参考:

Bundle 文档还提供了有关缓存的信息。因此,理论上要删除/禁用缓存,您所要做的就是<argument type="service" id="misd_guzzle.cache.filesystem"/>从您的 addSubscriber 部分中删除对的引用MyBundle/Resources/config/services.xml