1

PythonのGoogle App Engineでこれをやろうとしています:

def add_to_db(person):
     a = PersonDb(key_name = person)
     # get some data
     data1 = a.name
     data2 = a.age
     a.put()

for person in people:
    deferred.defer(add_to_db, person, _queue="myque")

cron ジョブを介して上記のコードを実行すると、機能しません。ファイルはエラーなしで実行され、タスク (リスト 'People' には 200 個の文字列があります) がキューに正しく追加され、正しくトリクルスルーされます。しかし、データベース PersonDb は更新されません。これが機能するため、関数が機能することを知っています(上記は簡略化されています)。

for person in people:
     add_to_db(person)

上記の 2 行のコードは機能し、データベースは更新されますが、これを遅延タスクとして実行する必要があります。助言がありますか?

更新: ログでこれを取得しています: ファイル "C:\Program Files\Google\google_appengine\google\appengine\ext\deferred\deferred.py", line 129, in run raise PermanentTaskFailure(e) PermanentTaskFailure: 'module'オブジェクトには属性「add_to_db」がありません

4

1 に答える 1

2

これはおそらく、延期しようとしている関数 ( add_to_db) が要求ハンドラで定義されているために発生しています。add_to_db別のモジュール (別の python ファイル) に移動し、そこからインポートします ( from myfuncs import add_to_db)。

この制限については、延期された記事の制限セクションに記載されています。

于 2011-06-05T04:07:20.347 に答える