我在taskqueue API中看到了一個bug行爲。當任務失敗時,即使我不告訴它,appengine也會再次運行它。即使task_retry_limit = 0,appengine也會運行失敗的任務兩次
這是相關代碼:
NO_RETRY = TaskRetryOptions(task_retry_limit=0)
class EnqueueTaskDapau(webapp2.RequestHandler):
def get(self):
taskqueue.add(
url='/task_dapau',
queue_name='DEFAULT',
retry_options=NO_RETRY
)
class TaskDapau(webapp2.RequestHandler):
def get(self):
logging.warning('Vai dar pau')
raise BaseException('Deu pau :-)')
def post(self):
return self.get()
application = webapp2.WSGIApplication([
('/', MainPage),
('/enqueue_dapau', EnqueueTaskDapau),
('/task_dapau', TaskDapau),
], debug=True)
整個應用程序是available on Github所以它應該很容易重現。 當我指出我的瀏覽器/ enqueue_dapau,這是我在日誌中看到(在Web控制檯上):
2014-10-30 08:31:01.054 /task_dapau 500 4ms 0kb AppEngine-Google; (+http://code.google.com/appengine) module=default version=1
W 2014-10-30 08:31:01.052 Vai dar pau
E 2014-10-30 08:31:01.053 Traceback (most recent call last): File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in
2014-10-30 08:31:00.933 /task_dapau 500 3ms 0kb AppEngine-Google; (+http://code.google.com/appengine) module=default version=1
W 2014-10-30 08:31:00.931 Vai dar pau
E 2014-10-30 08:31:00.932 Traceback (most recent call last): File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in
2014-10-30 08:31:00.897 /enqueue_dapau 200 91ms 0kb Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36 module=default version=1
如果我把任務隊列的Web控制檯上,我看到「運行在最後一分鐘== 2" 這種現象是從我與SDK本地得到不同:
INFO 2014-10-30 15:49:05,711 module.py:666] default: "GET /enqueue_dapau HTTP/1.1" 200 -
WARNING 2014-10-30 15:49:05,729 views.py:33] Vai dar pau
ERROR 2014-10-30 15:49:05,729 wsgi.py:279]
Traceback (most recent call last):
File "/home/tony/google_appengine/google/appengine/runtime/wsgi.py", line 267, in Handle
result = handler(dict(self._environ), self._StartResponse)
File "/home/tony/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__
rv = self.router.dispatch(request, response)
File "/home/tony/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
return route.handler_adapter(request, response)
File "/home/tony/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__
return handler.dispatch()
File "/home/tony/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch
return method(*args, **kwargs)
File "/home/tony/work/qmag/gaetests/src/views.py", line 37, in post
return self.get()
File "/home/tony/work/qmag/gaetests/src/views.py", line 34, in get
raise BaseException('Deu pau :-)')
BaseException: Deu pau :-)
INFO 2014-10-30 15:49:05,735 module.py:666] default: "POST /task_dapau HTTP/1.1" 500 -
WARNING 2014-10-30 15:49:05,735 taskqueue_stub.py:1986] Task task4 failed to execute. The task has no remaining retries. Failing permanently after 0 retries and 0 seconds
這是一個錯誤? (它真的看起來像這樣)
有沒有簡單的解決方法呢?
提交的他們的跟蹤錯誤 - https://code.google.com/p/googleappengine/issues/detail?id=11425 – 2014-10-30 17:10:40
相關:http://stackoverflow.com/questions/5505416/google -app-engine-task-retry-limit-doesnt-work – 2014-10-30 18:15:36