Как запустить make_server из simple_server в python на многопроцессорном? - PullRequest
4 голосов
/ 09 февраля 2012

У меня есть одна простая программа 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()

Таким образом, согласно коду, если timestamp равно Even, то он отправит ответ через 10 секунд. Но если timestamp равно Odd, то он отправит ответ напрямую без сна.

Итак, мой вопрос: если я отправлю 2 запроса, и если первый запрос отправит запрос в режиме Even, тогда мой второй запрос будет обработан после завершения первого.

Я проверил решение и обнаружил, что запрос 'multiprocess can solve this problem. I set the apache configuration with multiprocess . Then I get the response for Odd without completing Even`.

Я проверяю, как установить 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 Ответ

2 голосов
/ 13 февраля 2012

Если вы используете Apache / mod_wsgi, тогда вам не понадобится make_server/serve_forever. Apache справится с этим за вас (так как это веб-сервер). Он будет обрабатывать процессы и запускать функцию обратного вызова application.

Убедитесь, что ваша конфигурация Apache и mod_wsgi допускает многопроцессорность / многопоточность. Хорошая ссылка доступна здесь

...