2011-02-22 2 views
5

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

У меня такое впечатление, что это возможно, так как каждая сторона следует спецификации 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

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

+0

Да, я подтвердил, что поскольку вишневое дерево и объекты приложения содержат _callable_, все должно работать так, как ожидалось ... Я также проведу freenode для удаленной тестовой платформы. Ура! – deecodameeko

3

Этот пример будет работать до тех пор, пока вы не столкнетесь с переключателем greenlet внутри обработчиков черри! Таким образом, это не удастся, если вы используете 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 переключается на обработку следующим будет перезаписывать контент длина заголовок в глобальном объекте, и вы столкнетесь с странными ошибками на стороне клиента.

+0

Действительно. Кто-то должен заменить threadlocal «обслуживающий» объект зеленой-локальной, если они хотят использовать зеленые. – fumanchu

Смежные вопросы