Python的SOAPpy库线程是否安全?

时间:2011-05-03 21:34:34

标签: python soap thread-safety

Python的SOAPpy库的线程安全性如何?我发现文档不存在,并且在任何地方都没有提及线程安全(支持或反对)。

具体来说,线程可以共享一个SOAPpy.SOAPProxy对象,调用不同的RPC 吗? e.g,

client = SOAPpy.SOAPProxy(url)
thread1: client.MyFunc()
thread2: client.MyFunc()

没有不良影响?

此外,代理对象构建昂贵

1 个答案:

答案 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请求往返时间相比,这个实例应该很小。