如何在apache上部署python web服务

时间:2012-06-27 07:32:43

标签: python web-services apache

我是Python的绿色手。我有一个简单的web服务与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中部署这个程序,但看起来很难,我在谷歌搜索这个很长一段时间,现在让我很累。谁可以给我一个帮助,谢谢

2 个答案:

答案 0 :(得分: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,则可以合理地访问help pages

答案 1 :(得分:0)

当您的Web服务使用WSGI来提供文件时,您可以使用任何符合WSGI标准的Apache模块,例如: mod_wsgi

您还可以使用Gunicorn之类的独立WSGI服务器,然后将请求从主Web服务器传递到Gunicorn服务器进程。

如果你不需要使用Apache:Nginx结合Gunicorn或uwsgi是一个非常广泛使用的解决方案来提供WSGI应用程序。