使用Custom DatabaseScheduler时,CeleryBeat突然跳过调度几项任务

时间:2017-09-15 17:41:52

标签: django django-celery celerybeat

我们正在使用

django-celery==3.1.10
celery==3.1.20
python 2.7.13
Broker - RabbitMQ

我们编写了一个CustomDataBaseScheduler来调度任务,该任务从MySQL表(Django模型)中读取条目,并在给定时间内完美地调度任务(mysql表列指定时间)。我们正在运行CeleryBeat Process作为初始化脚本。

我们的调度模型有大约3000个条目,其中大部分是每5分钟安排一次,有些是每15分钟,少数是每小时。但是他们中的一些任务被忽略了,但没有及时获得时间表。此行为是随机的,并且适用于任何任务。

在挖掘节拍日志时,我们在日志中发现了MySQL异常,

Traceback (most recent call last):
  File "/opt/DataMonster/datamonster/db_monster/scheduler.py", line 202, in schedule_changed
  transaction.commit()
  File "/opt/python-2.7.11/lib/python2.7/site-packages/django/db/transaction.py", line 154, in commit
  get_connection(using).commit()
  File "/opt/python-2.7.11/lib/python2.7/site-packages/django/db/backends/__init__.py", line 175, in commit
  self.validate_no_atomic_block()
  File "/opt/python-2.7.11/lib/python2.7/site- packages/django/db/backends/__init__.py", line 381, in validate_no_atomic_block
 "This is forbidden when an 'atomic' block is active.")

已检查多个站点的错误,并显示它已实现隔离级别。我们在BEAT日志中没有发现任何其他异常。

  

MySQL中使用的隔离方法是READ-UNCOMMITED

需要帮助来解决这个问题。

0 个答案:

没有答案