六、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)
原文地址:https://www.cnblogs.com/ygbh/p/13754580.html