2013-03-16 3 views
1

Я использую Python 2.7 с WebApp2, и я новичок в них обоих. Я запускаю WebApp2 вне App Engine и следую official tutorial.Как добавить поддержку многопоточности в WebApp2?

Предоставлено HelloWord использует веб-сервер Paste и работает нормально, но если я могу изменить его таким образом (добавлены некоторые спальные):

import webapp2 

class HelloWebapp2(webapp2.RequestHandler): 
    def get(self): 
     import time 
     time.sleep(6) 
     self.response.write('Hello, webapp2!') 

app = webapp2.WSGIApplication([ 
    ('/', HelloWebapp2), 
], debug=True) 

def main(): 
    from paste import httpserver 
    httpserver.serve(app, host='127.0.0.1', port='8080', use_threadpool=True) 

if __name__ == '__main__': 
    main() 

и одновременно открывать несколько вкладок, чем это очевидно, что эта HelloWord работает в одном потоке , Я добавил use_threadpool = True только для многословия, насколько я понимаю (из чтения Paste docs), он должен использовать многопоточность в любом случае даже без threadpool.

Я пробовал поиск в Интернете, но, к сожалению, все, что я получаю, это то, что «webapp2 является потокобезопасным, когда доступен модуль webapp2_extras.local». Это мне совсем не помогает.

Пожалуйста, покажите мне, как изменить этот HelloWord, чтобы отвечать на запросы асинхронно!

P.S. Боковой вопрос: если бы я использовал Go, могу ли я запустить каждый обработчик в goroutine для достижения базового параллелизма? Или они (goroutines) используются только для небольших функций? Пока я еще не женат на Python, я оцениваю любую альтернативу.

Редактировать: Я обнаружил, что это проблема Google Chrome, а не Python. В других браузерах все работает так, как ожидалось, поэтому пример уже запущен в нескольких потоках. Однако я не знаю, как закрыть вопрос здесь.

ответ

0

Вам нужно добавить следующий флаг в свой app.yaml файл:

THREADSAFE: да

см this

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