我将芹菜任务组合在一起,当组中的一个任务达到最大重试次数时,这些任务就会挂起。
我只是在任务正文中提出异常(即解包和验证),因为我还在试验任务的重试功能。
以下是代码:
@app.task(name='job', bind=True, queue='job')
def process_job(self, job_type, params):
res = None
ret = {"job_status":"SUCCESS", "job_message":"job_process_done"}
res = group(unpack.s(params["s3_location"]),
validate.s(params["s3_location"]))()
return res.get()
@app.task(name='unpack', bind=True, queue='unpack', max_retries=3,
default_retry_delay=1*10)
def unpack(self, s3_location):
ret = {"unpack_status":"SUCCESS", "unpack_message":"unpack_done"}
try:
raise Exception("")
except Exception, ex:
if unpack.request.retries == unpack.max_retries:
raise Exception('UNPACK: Max Retries Reached')
else: unpack.retry(args=[s3_location])
return ret
@app.task(name='validate', bind=True, queue='validate', max_retries=4,
default_retry_delay=1*10)
def validate(self, s3_location):
ret = {"validate_status":"SUCCESS",
"validate_message":"validate_done"}
try:
raise Exception("")
except Exception, ex:
if validate.request.retries == validate.max_retries:
raise Exception('VALIDATE: Max Retries Reached')
else: validate.retry(args=[s3_location])
return ret
当达到验证任务的最大重试次数时,另一个任务(解包)以及父任务(process_job)未完成。也就是说,他们的状态分别坚持'重试'和'开始'。以下是快照图片:
1。花卉显示工作状态
2。已达到终端显示最大重试次数的芹菜工人
第3。验证花卉中的详细状态
4。在花中解包详细状态
如何修复未完成的任务问题?我在任务代码/实现中做错了吗?
答案 0 :(得分:0)
对于那些遇到过同样问题的人,我能够通过将每个任务的max_retries的间隙至少设为2来解决这个问题(例如,对于unpack,max_retries = 3,对于validate,max_retries = 5)。通过执行此操作,将执行其他任务的重试尝试并在try-catch块中捕获。
希望这有帮助!