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


How to reset a Guzzle client and clear any cached values (memory usage)

我有与下面类似的代码(这是示例代码)。使用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/Resources/config/cache.xml
  • Bundle/DependencyInjection/MisdGuzzleExtension.php
  • Bundle/DependencyInjection/Configuration.php

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