Pythonのタスクキューを使用したGoogle AppEngineの非同期呼び出し

google-app-engine python task-queue
Pythonのタスクキューを使用したGoogle AppEngineの非同期呼び出し

Google App EngineのタスクキューAPIが初めてです。 新しいキューを作成し、taskqueue.add()関数を使用してそこにタスクを追加しました。 タスクのURLを定義し、タスクのロジックをURLに書き留めました。 ただし、アプリはタスクの完了を待機しているため、タスクは非同期に発生しません。その後、taskqueue.add()関数の後、ステートメントの実行を継続します。 タスクを非同期にするにはどうすればよいですか? この問題に関するヘルプを歓迎します。

コードは次のようになります

class botinitiate(webapp.RequestHandler):
    def get(self):
        # some more statements here
        template_values = {'token': token,
                           'me': user.user_id()
                          }

        taskqueue.add(url='/autobot', params={'key':game_key},queue_name='autobot')
        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))


class autobot(webapp.RequestHandler):
    def post(self):
        # task logic goes here


application = webapp.WSGIApplication([('/botinitiate',botinitiate),('/autobot',autobot)],debug=True)


def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

ありがとう

  1  0


ベストアンサー

最近開発されたhttps://code.google.com/p/appengine-devappserver2-experiment/[dev_appserver2]は、ユーザーリクエストとタスクキューリクエストの同時実行性を提供し、本番環境のより正確なエミュレーションを実現します。

2


App Engineのタスクキューは非同期です。タスクをキューに入れたリクエストが、タスクがいつ実行されたかを知る方法はありません(RPC呼び出しまたは他の意図的な通信を行うこと以外)。 観察しているのは、dev_appserver開発環境のシングルスレッドの性質です。これは確かに本番では当てはまりません。

0


だからあなたが使用するでしょう:

add_async(task, transactional=False, rpc=None)

ソース:https://developers.google.com/appengine/docs/python/taskqueue/queues

上記のURLにあるドキュメントを読んで、独自のコードに適用する必要があります。

0


タイトルとURLをコピーしました