запуск приложения cherrypy на сервере gevent wsgi - PullRequest
5 голосов
/ 22 февраля 2011

У меня есть приложение cherrypy, но я хочу знать, возможно ли вообще запустить его на сервере gevent wsgi.Я думаю, что могу, но у меня нет доступа к серверу Linux, чтобы проверить Gevent, и я не смог запустить его на моем Mac.

У меня сложилось впечатление, что это возможно, поскольку каждая сторона следует спецификации wsgi.

Кто-нибудь пробовал это?

Я думаю, пример будет выглядеть следующим образом:

import cherrypy 
from gevent import wsgi

class Root(object):
     def index(self):
        return "hi!"
     index.exposed = True

app = cherrypy.tree.mount(Root(), '/')
wsgi.WSGIServer(('', 8088), app).serve_forever()

Ответы [ 2 ]

3 голосов
/ 06 июня 2012

Этот пример будет работать, пока вы не столкнетесь с переключателем greenlet внутри обработчиков cherrypy! Так что это не удастся, если вы используете gevent для асинхронной связи внутри обработчиков.

cherrypy использует глобальный объект для хранения ответа и заголовки внутри найдены внутри cherrypy / __ init__.py:~350:

# Create request and response object (the same objects will be used
#   throughout the entire life of the webserver, but will redirect
#   to the "serving" object)
request = _ThreadLocalProxy('request')
response = _ThreadLocalProxy('response')

Если вы приостановите один запрос и Gevent переключится на обработку следующего, он перезапишет заголовок длины содержимого в глобальном объекте, и вы столкнетесь со странными ошибками на стороне клиента.

2 голосов
/ 01 марта 2011

Этот пример отлично работает. Я уверен, что #gevent на freenode поможет вам с любыми проблемами при установке.

...