我一直在使用芹菜(3.1),django-celery(3.1.17)(即djcelery)与Django(1.9)进行调度任务。最近我注意到PeriodicTasks
表的一次更新查询需要花费大量时间(大约1分钟),因此调度任务的整个过程运行缓慢。模型PeriodicTasks
的更新查询由PeriodicTask
model上的pre_save
和pre_delete
个字母调用。因此,每当在PeriodicTask
表中添加新对象时,信号触发器和调用PeriodicTasks.changed
method就会一次又一次地更新相同的PeriodicTasks对象的值。
我假设更新查询工作缓慢,因为数百万个任务在很短的时间内发布,并且每个任务相同的PeriodicTasks对象都会更新。
问题是(如果我不想升级到celery 4.x),此更新(PeriodicTasks
对象)的目的是什么?如果我删除signal call,它会以任何方式影响django-celery的功能吗?
另外,对于celery4,pre_save
和pre_delete
djcelery/models.py
的同一信号呼叫也会发生。所以即使我升级到芹菜4也无济于事。
我通过评论PeriodicTasks
中的两个信号调用来实验,一切运行良好。现在的问题是这次更新通话的目的是什么?为什么要调用信号来更新com.example.neo.smsapp.IFTT.CancelAnAlarmActivity
的相同实例。