2

我是 Python 的新手。我有一个简单的 Python 网络服务,如下所示:

enter code here

import soaplib
from soaplib.core.service import rpc, DefinitionBase
from soaplib.core.model.primitive import String, Integer
from soaplib.core.server import wsgi
from soaplib.core.model.clazz import Array
from soaplib.core.service import soap

class HelloWorldService(DefinitionBase):

    @soap(String,Integer,_returns=Array(String))
    def say_hello(self,name,times):
        results = []
        for i in range(0,times):
            results.append('Hello, %s'%name)
        return results
if __name__=='__main__':

    try:

        from wsgiref.simple_server import make_server
        soap_application = soaplib.core.Application([HelloWorldService], 'tns')
        wsgi_application = wsgi.Application(soap_application)
        server = make_server('10.44.138.231', 9999, wsgi_application)
        server.serve_forever()

    except ImportError:

        print "Error: example server code requires Python >= 2.5"

当我在localhost中访问服务时它非常快,但是从局域网中的另一台主机它会变得非常慢。

所以我想在apache中部署这个程序,但是似乎很难,我在google上搜索了很长时间,现在让我很累。谁能帮帮我,谢谢

4

2 回答 2

1

我建议使用mod_wsgi(而不是mod_python),因为 WSGI 是托管 Python Web 应用程序的标准方式。

在您的情况下,您需要application在全局范围内调用一个函数:

        # ....
        return results

soap_application = soaplib.core.Application([HelloWorldService], 'tns')
application = wsgi.Application(soap_application)

if __name__ == "__main__":
    # ....

然后在 Apache 中启用 mod_wsgi 并在 (WSGIScriptAlias是主要的) 中添加指令。如果您以前配置过 Apache,则可以合理地访问帮助页面。

于 2012-06-27T08:06:29.980 回答
0

由于您的 Web 服务使用WSGI来提供文件,因此您可以使用任何符合 WSGI 的 Apache 模块,例如mod_wsgi

您还可以使用像Gunicorn这样的独立 WSGI 服务器,然后将来自主 Web 服务器的请求传递给 Gunicorn 服务器进程。

如果您不需要使用 Apache:Nginx与 Gunicorn 或 uwsgi 相结合是一种非常广泛使用的服务于 WSGI 应用程序的解决方案。

于 2012-06-27T07:58:46.817 回答