我们正在使用
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
需要帮助来解决这个问题。