1

私は 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の問題であることがわかりました。他のブラウザーではすべてが期待どおりに機能するため、この例は既に複数のスレッドで実行されています。ただし、ここで質問を閉じる方法がわかりません。

4

1 に答える 1