六、Celery任务执行超时的设置
1、time_limit和soft_time_limit区别
time_limit : 执行超时,结束signal 9 (SIGKILL) 执行的子进程,状态:"status": "FAILURE" soft_time_limit :执行超时,用一个异常SoftTimeLimitExceeded来捕捉,状态:"status": "SUCCESS"
目前只能在linux操作系统才有效
2、在装饰器里面指定超时时间
2.1、time_limit 示例
@shared_task(time_limit=10) def handler_upload_data(file_path): """ 处理分析上传文件 :param file_path: :return: """ ret = { 'code': 0, 'msg': '' } import time time.sleep(20) ret['data'] = { 'file_path': file_path } print('正常处理') return ret
运行效果
2.2、soft_time_limit示例
@shared_task(soft_time_limit=10) def handler_upload_data(file_path): """ 处理分析上传文件 :param file_path: :return: """ ret = { 'code': 0, 'msg': '' } try: import time time.sleep(20) ret['data'] = { 'file_path': file_path } print('正常处理') except SoftTimeLimitExceeded: ret['code'] = 1 ret['msg'] = '处理超时,请重新上传' return ret
运行效果
3、在调用任务的时候指定超时时间[简单介绍]
handler_upload_data.apply_async((full_path,), soft_time_limit=10)
handler_upload_data.apply_async((full_path,), time_limit=10)