我有一个芹菜任务正在使用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