私は WebApp2 で Python 2.7 を使用していますが、どちらも初めてです。App Engine の外部で WebApp2 を実行しており、公式のチュートリアルに従っています。
提供される HelloWord は Paste Web サーバーを使用し、正常に動作しますが、このように変更すると (いくつかのスリープが追加されます):
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 が 1 つのスレッドで実行されていることは明らかです。冗長性のためだけに use_threadpool=True を追加しました。理解できる限り (Paste docs を読んでから)、スレッドプールがなくてもマルチスレッドを使用する必要があります。
グーグルを試してみましたが、残念ながら「モジュール webapp2_extras.local が利用可能な場合、webapp2 はスレッドセーフです」というだけです。それは私をまったく助けません。
この HelloWord を変更してリクエストに非同期で応答する方法を教えてください!
PS サイドの質問: Go を使用している場合、ゴルーチンですべてのハンドラーを実行して、基本的な同時実行を実現できますか? それとも、それら (ゴルーチン) は小さな関数にのみ使用する必要がありますか? 私はまだ Python と結婚していないので、代替手段を評価しています。
編集:Pythonの問題ではなく、Google Chromeの問題であることがわかりました。他のブラウザーではすべてが期待どおりに機能するため、この例は既に複数のスレッドで実行されています。ただし、ここで質問を閉じる方法がわかりません。