Python的SOAPpy库的线程安全性如何?我发现文档不存在,并且在任何地方都没有提及线程安全(支持或反对)。
具体来说,线程可以共享一个SOAPpy.SOAPProxy对象,调用不同的RPC 吗? e.g,
client = SOAPpy.SOAPProxy(url)
thread1: client.MyFunc()
thread2: client.MyFunc()
没有不良影响?
此外,代理对象构建昂贵?
答案 0 :(得分:1)
SOAPpy.SOAPProxy
乍一看似乎不是线程安全的。在版本0.12.0 __call
方法中,有一个赋值(Client.py
第360行):
r, self.namespace = self.transport.call(self.proxy, m, ns, sa,
encoding = self.encoding,
http_proxy = self.http_proxy,
config = self.config)
因此,如果从2个不同的线程调用client.MyFunc()
,它们将创建单独的连接,但都会为self.namespace
属性赋值。
从好的方面来说,为每个线程构建一个SOAPProxy实例应该非常有效。我能够在虚拟机上在~1ms内创建100个实例,与SOAP请求往返时间相比,这个实例应该很小。