python 3 suds缓存不起作用

帕维尔·切尔尼科夫(Pavel Chernikov)

我正在尝试编写用于通过Python访问Sharepoint的脚本。

已安装以下库:suds.jurko,ntlm。

以下代码成功,但是需要将近20秒:

#!/usr/bin/env python3

from suds.client import Client
from suds.transport.https import WindowsHttpAuthenticated
from suds.cache import ObjectCache

url = 'http://blah/_vti_bin/Lists.asmx?WSDL'
user = "blah"
passwd = "blah"

ntlm = WindowsHttpAuthenticated(username=user, password=passwd)
client = Client(url, transport=ntlm)

我尝试添加缓存:

oc = ObjectCache()
oc.setduration(days=10)
client = Client(url, transport=ntlm, cache=oc)

我看到创建了/ tmp / suds,并且在其中看到了缓存文件,但是看起来每次运行它只会创建更多文件,而不是使用缓存文件:

-rw-r--r-- 1 pchernik smsvcs      3 Feb  5 13:27 version
-rw-r--r-- 1 pchernik smsvcs 309572 Feb  5 13:27 suds-536283349122900148-document.px
-rw-r--r-- 1 pchernik smsvcs 207647 Feb  5 13:27 suds-4765026134651708722-document.px
-rw-r--r-- 1 pchernik smsvcs  21097 Feb  5 13:27 suds-1421279777216033364-document.px
-rw-r--r-- 1 pchernik smsvcs 207644 Feb  5 13:27 suds-6437332842122298485-document.px
-rw-r--r-- 1 pchernik smsvcs 309572 Feb  5 13:27 suds-3510377615213316246-document.px
-rw-r--r-- 1 pchernik smsvcs  21097 Feb  5 13:28 suds-7540886319990993060-document.px
-rw-r--r-- 1 pchernik smsvcs 207617 Feb  5 13:30 suds-1166110448227246785-document.px
-rw-r--r-- 1 pchernik smsvcs 309548 Feb  5 13:30 suds-2848176348666425151-document.px
-rw-r--r-- 1 pchernik smsvcs  21076 Feb  5 13:31 suds-6077994449274214633-document.px
  • 肥皂水通常这么慢吗?
  • 关于解决缓存问题有什么想法吗?
  • 还有其他可以代替suds使用的python 3库吗?

任何想法/建议表示赞赏。

谢谢,-Pavel

戴维·纽尼斯

我遇到了同样的问题,请尝试将您的cachingpolicy设置为1:

client = Client(url, transport=ntlm, cache=oc, cachingpolicy=1)

这将缓存您的WSDL对象而不是XML文件。

从suds文档中:

缓存策略

缓存策略确定如何缓存数据。默认值为0。版本0.4+

  • 0 = XML文档,例如WSDL和XSD。
  • 1 = WSDL对象图。

编辑:我重新阅读了您的问题,意识到我缺少重要的东西;您的缓存正在重新生成。我认为这是由于未指定缓存位置。这来自cache.py中FileCache类的文档:

如果未指定缓存位置,将使用一个临时的默认位置。此类默认缓存位置将由所有FileCache实例共享,而在同一进程中没有明确指定的位置。除非用户将remove_default_location_on_exit FileCache类属性设置为False,否则默认的高速缓存位置将在进程退出时自动删除

因此,即使您要使用默认的缓存位置,在创建缓存对象时也需要显式定义它。这是我在代码中所做的:

    # Configure cache location and duration ('days=0' = infinite)
    cache_dir = os.path.join(os.path.abspath(os.sep), r'tmp\suds')
    self.cache = ObjectCache(cache_dir, days=0)

您也可以尝试按照FileCache文档中的建议设置remove_default_location_on_exit属性,但是我尚未尝试此方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章