2011-01-06 56 views
4

私は本当のコーディングn00bですので、これが単純か基本的な質問であれば謝ります。非同期Pythonクラス

私はPython、Webapp、Appengineでコーディングしています。

私の質問は、ページを書き終えてから作業を続けることができますか?それが何かをする最善の方法ですか?基本的に、誰かが私のサイト(www.7bks.com)にリストを作成すると、ちょうど彼らが選んだ本の「後処理」をするために少しでも働き続けたいと思っています。

現在、私はこのような何か(擬似コード!)

class InputList(webapp.RequestHandler): 
    def post(self): 
     #get books data from the post and put in datastore 
     list = List() 
     list = self.request.get('books') 
     list.put() 

     #redirect the user to the new list 
     self.redirect("http://www.7bks.com/list/&s" % list.id) 

を持って、私は、リスト内の各書籍にしたいと思ういくつかの(APIコールを含む)、低速後処理を持っています。後処理がリストページに直接影響しないため、ユーザーのリダイレクトやリストページの生成を遅らせる必要はありません。だから私はこれをすることができますか?

class InputList(webapp.RequestHandler): 
    def post(self): 
     #get books data from the post and put in datastore 
     list = List() 
     list = self.request.get('books') 
     list.put() 

     #redirect the user to the new list 
     self.redirect("http://www.7bks.com/list/&s" % list.id) 

     #carry on working behind the scenes independently of the user 
     for book in list: 
      data = heavyprocessing(book) 

これは、私のアプリケーションが効果的にリダイレクトを提供し、その場で作業を続けさせる原因になりますか?

もっと良い方法がありますか?私はCRONを使うことができたことを知っていますが、リストを作成した直後に、この重い処理データをすぐには欲しいですが、すぐには望みません。 CRONのような気分は正しい答えではないかもしれません(私は毎分実行するCRONスクリプトを持っていて、処理する新書をチェックしないと)。それをフレーズする良い方法です。私はこの種のもののためのいくつかの標準的な用語があると確信していますが、私はそれが何であるか分かりません。感謝:)

トム

答えて

5

Task Queue APIをチェックしてください。

タスクキューまたはメッセージキューは、ユーザー要求によって開始されるが、その要求の実行の時間枠内で完了する必要がない、何らかの処理を行う方法となりがちです。

+0

恐ろしい!ありがとうジェームズ私はそれが基本的に正確に私が探していると思う。気にして申し訳ありませんが、私はそれが簡単な修正であることを知っていました! – tomcritchlow

+0

問題ありません。お役に立てて嬉しいです。 – jamesaharvey

+0

SDKの 'deferred'ライブラリをチェックして、タスクキューを関数呼び出しのように簡単に使うこともできます。免責事項:私は延期を書いたので、私は偏っています。 ;) –