我很确定suds并没有像我期望的那样缓存我的WSDL和XSD .以下是我知道没有使用缓存对象的方法:
client = Client(url)我有一个小程序,它创建一个suds客户端,发送一个请求,获取响应,然后结束.我的期望是每次运行程序时,都应该从文件缓存中获取WSDL和XSD文件,而不是从URL中获取.这就是为什么我认为:
client.options.cache.duration 被设置为 ('days', 1)client.options.cache.location设置为c:\docume~1\mlin\locals~1\temp\suds,我看到每次运行程序时生成并重新生成缓存文件我是否误解了suds缓存应该如何工作?
Mik*_*Lin 16
问题出在suds库本身.在cache.py中,虽然ObjectCache.get()总是获得一个有效的文件指针,但它正在执行异常(EOFError)pickle.load(fp).发生这种情况时,只会再次下载该文件.
这是事件的顺序:
DocumentReader.open():
因此保存新缓存文件并不重要,因为下次运行时会发生同样的事情.所有WSDL和XSD文件都会发生这种情况.
我通过在读取和写入时以二进制模式打开缓存文件来解决该问题.具体来说,我所做的更改是在cache.py中:
1)在FileCache.put(),更改此行:
f = self.open(fn, 'w')
Run Code Online (Sandbox Code Playgroud)
至
f = self.open(fn, 'wb')
Run Code Online (Sandbox Code Playgroud)
2)在FileCache.getf(),改变这一行:
return self.open(fn)
Run Code Online (Sandbox Code Playgroud)
至
return self.open(fn, 'rb')
Run Code Online (Sandbox Code Playgroud)
我不知道代码库是否足以知道这些更改是否安全,但它是从文件缓存中提取对象,服务仍然成功运行,并且加载客户端从16秒下降到2.5秒.如果你问我,好多了.
希望这个修复或类似的东西可以回到suds主线.我已经将它发送到suds邮件列表(redhat dot com的fedora-suds-list).
| 归档时间: |
|
| 查看次数: |
2786 次 |
| 最近记录: |