执行数据库事务时未捕获Celery SoftTimeLimitExceeded

时间:2019-10-31 10:08:06

标签: python mysql celery django-celery celery-task

我有一个芹菜任务正在使用soft_time_limit启动。

除了SoftTimeLimitExceededed之外,尝试的整个逻辑都被尝试所包围。

查看日志时,我可以看到芹菜写了日志

some_log.log:58232:[2019-10-31 09:19:48,794] [WARNING] [module: job] [logger: celery.worker.job]: Soft time limit (4s) exceeded for project.tasks.some_task[168a4c38-5672-483b-b3cc-dd7c35d85b93] some_log.log:58235:[2019-10-31 09:19:48,939] [ERROR] [module: base] [logger: sentry.errors.uncaught]: [u'Soft time limit (4s) exceeded for project.tasks.some_task[168a4c38-5672-483b-b3cc-dd7c35d85b93]']

我正在使用:

芹菜== 3.1.15

django-celery == 3.1.1

MySQL-python == 1.2.5

Python 2.7.16

MySQL 5.7

任务看起来像这样:

@task(soft_time_limit=4)
def some_task(self, *args, **kwargs):
    try:
        with MySQLdb.connect(host=host, port=port,
                             user=user, passwd=password,
                             db=name, local_infile=1, autocommit=False) as cursor:
            cursor.execute("update ....")
    except SoftTimeLimitExceeded:
    # handle

我尝试对连接和游标应用错误处理程序以引发异常,但仍然没有运气。

似乎该过程只是在没有引发异常的情况下就终止了。

我尝试的一件事是启动一个新线程,该线程会延迟任务并等待其完成。

除了SoftTimeLimitExceededed之外,线程只是尝试绕过延迟,并对延迟进行了get()。

该线程设法从任务中捕获异常。

def thread_delay(*args, **kwargs):
    try:
        some_task.delay(args, kwargs).get()
    except SoftTimeLimitExceeded:
    # Handle

0 个答案:

没有答案