HTTP-сервер Python доступен для нескольких запросов

Я много изучал BaseHTTPServer и обнаружил, что он не так хорош для нескольких запросов. Я просмотрел эту статью http://metachris.org/2011/01/scaling-python-servers-with-worker-processes-and-socket-duplication/#python

и я хотел знать, как лучше всего построить HTTP-сервер для нескольких запросов ->

Мои требования к HTTP-серверу просты: поддержка нескольких запросов (где каждый запрос может запускать ДЛИННЫЙ скрипт Python)

До сих пор у меня есть следующие варианты -> - BaseHTTPServer (с потоком не очень хорошо) - Mod_Python (интеграция с Apache) - CherryPy? - Любой другой?


person abarik    schedule 02.10.2011    source источник


Ответы (3)


Мне очень повезло с веб-сервером CherryPy, одним из старейших и наиболее надежных веб-серверов на чистом Python. Просто напишите свое приложение как вызываемое WSGI, и его будет легко запускать под многопоточным сервером CherryPy.

http://www.cherrypy.org/

person Brandon Rhodes    schedule 02.10.2011

Действительно, HTTP-серверы, поставляемые со стандартной библиотекой Python, предназначены только для легкого использования; Для умеренного масштабирования (сотни одновременных подключений) mod_wsgi в apache — отличный выбор.

Если ваши потребности превышают это (10 000 одновременных подключений), вам следует обратить внимание на асинхронный фреймворк, такой как Twisted или Tornado. Общая структура асинхронного приложения совершенно иная, поэтому, если вы считаете, что вам, вероятно, придется пойти по этому пути, вам определенно следует начать свой проект в одной из этих сред с самого начала.

person SingleNegationElimination    schedule 02.10.2011

Tornado — действительно хороший и простой в использовании асинхронный цикл событий/веб-сервер, разработанный FriendFeed. /Фейсбук. У меня лично очень хорошие впечатления от него. Вы можете использовать классы HTTP, как в примере ниже, или только io-loop для мультиплексирования простых TCP-соединений.

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()
person Chris Hager    schedule 16.10.2015