如何在多进程上从python中的simple_server运行make_server?

时间:2012-02-09 09:01:14

标签: python apache webserver mod-wsgi wsgi

我有一个简单的wsgi程序。

from wsgiref.simple_server import make_server
import time

def application(environ, start_response):
    response_body = 'Hello World'
    status = '200 OK'

    response_headers = [('Content-Type', 'text/plain'),
                    ('Content-Length', str(len(response_body)))]

    start_response(status, response_headers)

    if environ['PATH_INFO'] != '/favicon.ico':

        print "Time :", int(time.time())
        if int(time.time()) % 2:
            print "Even"
            time.sleep(10)
        else:
            print "Odd"
    return [response_body]

httpd = make_server('localhost', 8000, application)
httpd.serve_forever()

根据代码,如果timestampEven,那么它将在10秒后发送响应。但是如果timestampOdd,那么它将直接发送响应而不会睡眠。

所以我的问题是,如果我发送2个请求,如果第一个请求将以Even模式发送请求,那么我的第二个请求将在完成第一个请求后发送。

我检查解决方案,发现'multiprocess can solve this problem. I set the apache configuration with多进程. Then I get the response for奇数without completing偶数`请求。

我查看如何使用multiprocess模块的make_server方法设置simple_server。当我运行python /usr/lib64/python2.7/wsgiref/simple_server.py时,我得到输出,最后几行是

wsgi.errors = <open file '<stderr>', mode 'w' at 0x7f22ba2a1270>
wsgi.file_wrapper = <class wsgiref.util.FileWrapper at 0x1647600>
wsgi.input = <socket._fileobject object at 0x1569cd0>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = (1, 0)

所以我在搜索如何设置这个make_server多进程,这样如果有任何请求正在进行,make_server可以处理多于1个请求。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您使用的是Apache / mod_wsgi,则不需要make_server/serve_forever。 Apache将为您处理(因为它是Web服务器)。它将处理进程并运行application回调函数。

确保您的Apache和mod_wsgi配置允许多进程/多线程。有很好的参考资料here