2

AppEngine を使用して最初の「本格的な」アプリケーションを作成していて、タスク キューでいくつかの問題に遭遇しました。

appengine ドキュメントに記載されているサンプル コードを読み、再現しました。

タスクをカスタムキューに追加しようとしたとき、他の人にとってはうまくいくように見えませんが、私にとってはうまくいかないようです:

私がすることは:

from google.appengine.api import taskqueue

def EnterQueueHandler(AppHandler):
    def get(self):
        #some code
    def post(self):
        key = self.request.get("value")
        task = Task(url='/queue', params={'key':key})
        task.add("testqueue")
        self.redirect("/enterqueue")

そして、処理を行う「/queue」のハンドラーを設定しました。

問題は、これにより次のエラーがスローされることです。

NameError: グローバル名 'Task' が定義されていません

何故ですか?基本的なものが欠けているように思えますが、何がわかりません。Task-Class は taskqueue モジュールによって提供されるとドキュメントに記載されています。

ここまでで、上記のコードのタスク関連の 2 行を次のように置き換えると機能することがわかりました。

taskqueue.add(queue_name="testqueue", url="/queue", params={"key":key})

しかし、それにもかかわらず、他の方法が機能しない理由を理解したいと思います。誰かがここで私を助けてくれたらとてもうれしいです。

4

2 に答える 2

1

ドキュメントから

Taskモジュールによって提供されgoogle.appengine.api.taskqueueます。

すでにインポートされているため、

from google.appengine.api import taskqueue

この行を置き換えることができます:

task = Task(url='/queue', params={'key':key})

task = taskqueue.Task(url='/queue', params={'key':key})
于 2013-09-23T15:07:59.400 に答える
0

「タスク」がインポートされていないことが原因だと思います。以下は、私がいつもうまく使っている例です。あなたのものと同じように見えますが、私のインポートは異なります。

from google.appengine.api.taskqueue import Task

task = Task(
    url=url,
    method=method,
    payload=payload,
    params=params,
    countdown=0
)

task.add(queue_name=queue)
于 2013-09-23T15:11:25.967 に答える