Google Appエンジンタスクの締め切り
-
16-10-2019 - |
質問
タスクの実行中にソフト期限を処理する方法はありますか? Deadlineex HechedEderrorは10分間の実行後に投げられ、その後数秒後にいくつかのことをすることができます。タスクが死んで新しいタスクを作成する前に、何かをクリーンアップしたいと思います。これには数秒かかる場合があります。約9分のような例外をキャプチャすることでこれを行う方法はありますか?私は9分後に手動で例外を投げることができることを知っています。しかし、これはGAEによって自動的に実行できますか?
class FillMtxHandler():
def post(self,index,user,seqlen):
try :
FillMtx(index,user,seqlen)
except DeadlineExceededError:
deferred.defer(self.post,index,user,seqlen)
上記は私のコードです。インデックスはリストであり、0から始まります。FillMtx内で増加します。締め切りがエラーを超えたら、インデックスが最後に増加した場所から続行したいと思います。次のエラーが発生します
The API call taskqueue.BulkAdd() was explicitly cancelled.
Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 517, in __call__
handler.post(*groups)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/deferred/deferred.py", line 258, in post
run(self.request.body)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/deferred/deferred.py", line 124, in run
return func(*args, **kwds)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/deferred/deferred.py", line 166, in invoke_member
return getattr(obj, membername)(*args, **kwargs)
File "/base/data/home/apps/0xxopdp/3.347813391084738922/fillmtx.py", line 204, in post
deferred.defer(self.post,index,user,seqlen)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/deferred/deferred.py", line 241, in defer
return task.add(queue, transactional=transactional)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/taskqueue/taskqueue.py", line 688, in add
return Queue(queue_name).add(self, transactional=transactional)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/taskqueue/taskqueue.py", line 744, in add
self.__AddTasks(tasks, transactional)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/taskqueue/taskqueue.py", line 770, in __AddTasks
apiproxy_stub_map.MakeSyncCall('taskqueue', 'BulkAdd', request, response)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 86, in MakeSyncCall
return stubmap.MakeSyncCall(service, call, request, response)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 286, in MakeSyncCall
rpc.CheckSuccess()
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 126, in CheckSuccess
raise self.exception
CancelledError: The API call taskqueue.BulkAdd() was explicitly cancelled.
新しいタスクが作成され、列が並んでいることがわかりました。しかし、なぜGaeはこのエラーをまだ投げているのでしょうか?
解決
ソフト締め切りがエラーを超えたときに制御することはできません。代わりに、独自のタイマーを使用します(開始時に壁掛け時間を取り、メインループの周りの各旅行の現在の時間と比較してください)。
所属していません StackOverflow