gpt4 book ai didi

suds - Suds不会重用缓存的WSDL和XSD,尽管我希望它能重用

转载 作者:行者123 更新时间:2023-12-04 13:21:00 25 4
gpt4 key购买 nike

我很确定suds不会缓存我的WSDL和XSD的like I expect it to。这是我知道不使用缓存对象的方式:

  • 创建客户端大约需要30秒:client = Client(url)
  • 记录器条目显示整个30秒内对XSD和WSDL文件的一致摘要
  • Wireshark在整个30秒内显示到存储XSD和WSDL文件的服务器的一致TCP流量
  • 我每次运行程序
  • 时都会看到缓存中的文件正在更新

    我有一个小程序,它创建一个suds客户端,发送一个请求,获取响应,然后结束。我的期望是,每当我运行该程序时,它都应该从文件缓存中而不是从URL中获取WSDL和XSD文件。这就是我认为的原因:
  • client.options.cache.duration设置为('days', 1)
  • client.options.cache.location设置为c:\docume~1\mlin\locals~1\temp\suds,每次运行程序
  • 时,我都会看到正在生成和重新生成的缓存文件
  • 有一会儿,我认为也许在程序运行之间不会重用高速缓存,但是我不认为这种情况下将不使用文件高速缓存,因为内存中的高速缓存可以很好地完成

  • 我是否误解了suds缓存应该如何工作?

    最佳答案

    问题出在suds库本身中。在cache.py中,尽管ObjectCache.get()总是获取有效的文件指针,但它在执行pickle.load(fp)时遇到了异常(EOFError)。发生这种情况时,将再次下载该文件。

    这是事件的顺序:

    DocumentReader.open():

  • 尝试http://172.28.50.249/wsdl/billingServices/v3.0/RequestScrubAddress.wsdl
  • 加载ObjectCache 51012453-文档
  • 正在加载腌制的对象...
  • 引发异常:
  • 没有从缓存
  • 中获取
  • 正在下载...完成
  • 正在保存FileCache 51012453-文档...完成

  • 因此,保存新的缓存文件并不重要,因为下次运行时会发生相同的情况。所有WSDL和XSD文件都会发生这种情况。

    我通过在读写时以二进制模式打开缓存文件来解决该问题。具体来说,我所做的更改在cache.py中:

    1)在FileCache.put()中,更改此行:
    f = self.open(fn, 'w')


    f = self.open(fn, 'wb')

    2)在FileCache.getf()中,更改此行:
    return self.open(fn)


    return self.open(fn, 'rb')

    我不太了解代码库是否知道这些更改是否安全,但是它正在从文件缓存中拉出对象,服务仍在成功运行,并且加载客户端的 从16秒降低到2.5秒。如果你问我好多了。

    希望此修复程序或类似的方法可以引入到suds主线中。我已经将其发送到suds邮件列表(redhat dot com上的fedora-suds-list)。

    关于suds - Suds不会重用缓存的WSDL和XSD,尽管我希望它能重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038226/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com