我们正在使用GAE 递延库卸载某些耗时的任务,并想知道如何为这些卸载的任务设置重试限制。我们遇到的问题是,某些任务将被永远地重新尝试,因为由于某些不可恢复的异常,该任务永远不会成功。
发布于 2016-04-14 11:22:17
根据文献资料,可以使用_retry_options
的deferred.defer
API将重试选项传递给关联的Task()
实例:
_retry_options,_countdown,_eta,_headers,_name,_target,_transactional,_url,_queue:传递到任务队列--有关详细信息,请参阅任务队列文档。
来自文档
..。
您可以使用TaskRetryOptions()'s
task_retry_limit
属性:
task_retry_limit 失败任务的最大重试次数。 在push队列中,每次App尝试任务时,计数器都会递增,直到指定的task_retry_limit。如果使用task_age_limit指定,App将重新尝试该任务,直到达到两个限制为止。 在拉队列中,每次租用任务时,计数器都会递增,直到指定的task_retry_limit为止。一旦任务被租出限制中指定的次数,任务就会自动删除。
注意:答案只是基于文档,我并没有真正实现它,YMMV。
发布于 2016-04-14 09:04:37
根据文档
queue:
- name: fooqueue
rate: 1/s
retry_parameters:
task_retry_limit: 7
task_age_limit: 2d
- name: barqueue
rate: 1/s
retry_parameters:
min_backoff_seconds: 10
max_backoff_seconds: 200
max_doublings: 0
- name: bazqueue
rate: 1/s
retry_parameters:
min_backoff_seconds: 10
max_backoff_seconds: 200
max_doublings: 3
发布于 2016-04-14 09:20:36
检查任务中的X-Appengine-Taskretrycount和X-Appengine-Taskexecutioncount http标头值。
如果不想重试任务,可以引发deferred.PermanentTaskFailure异常。此异常将只记录下来,任务将不再运行。
访问http头的不同方法:
由taskqueue触发的http处理程序的: num_tries =
由延迟库触发的函数的webapp2.get_request().headers.get('X-AppEngine-TaskRetryCount'): num_tries =
https://stackoverflow.com/questions/36604616
复制相似问题