用于同时处理多个请求的SOAP服务器的Python库?

时间:2012-02-16 09:29:41

标签: python multithreading web-services soap

我正在寻找一个python库,可以轻松创建一个公开Web服务(SOAP)的服务器,并且可以同时处理多个请求。

我尝试过使用ZSI和rcplib,但没有成功。

更新
谢谢你的回答。 ZSI和rcplib(soaplib的后继者)都实现了自己的Http服务器。如何将ZSI / rcplib与您提到的库集成?

UPDATE2:
经过一些调整后,我设法在linux上安装并运行它,它似乎运行良好 然后我在很多丑陋的调整之后将它安装在windows上,然后我发现在Windows中不支持WSGIDaemonProcess这一事实(在mod_wsgi docs中也有提及)。无论如何,我试图运行它,它似乎确实对每个请求都是异步,但我不确定它是否会在压力下运行良好。

非常感谢...

3 个答案:

答案 0 :(得分:1)

对不起,可能是我没理解你。

我认为您希望服务器并行处理HTTP请求,但是您不需要考虑您的代码/库。并行化应该由Apache httpd和mod_wsgi / mod_python模块完成。

例如,设置httpd.conf为'MaxClients 100','WSGIDaemonProcess webservice processes = 1 threads = 100'。

答案 1 :(得分:1)

您可以使用soaplib开发肥皂服务。要将该服务公开给其他人,您可以使用Apache和mod_wsgi模块。要设置多线程或多处理,您可以在mod_wsgi

中设置参数

答案 2 :(得分:1)

rpclib

的Hello World示例

请从rpclib示例

中查看
# File /home/myhome/test.wsgi
import logging

from rpclib.application import Application
from rpclib.decorator import srpc
from rpclib.interface.wsdl import Wsdl11
from rpclib.protocol.soap import Soap11
from rpclib.service import ServiceBase
from rpclib.model.complex import Iterable
from rpclib.model.primitive import Integer
from rpclib.model.primitive import String
from rpclib.server.wsgi import WsgiApplication

class HelloWorldService(ServiceBase):
    @srpc(String, Integer, _returns=Iterable(String))
    def say_hello(name, times):
        '''
        Docstrings for service methods appear as documentation in the wsdl
        <b>what fun</b>
        @param name the name to say hello to
        @param the number of times to say hello
        @return the completed array
        '''

        for i in xrange(times):
            yield 'Hello, %s' % name

application = WsgiApplication(Application([HelloWorldService], 'rpclib.examples.hello.soap',
                interface=Wsdl11(), in_protocol=Soap11(), out_protocol=Soap11()))

同时将您的apache配置更改为

WSGIDaemonProcess example processes=5 threads=5
WSGIProcessGroup example

WSGIScriptAlias / /home/myhome/test.wsgi
<Directory /home/myhome/>
Order deny,allow
Allow from all
</Directory>

根据您的要求,您可以更改流程和线程。