我编写了celery.schedules.schedule
接口的扩展,我不明白为什么在我创建的额外值中没有设置任何东西来实例化它。你知道吗
当我在传递给app.conf.CELERYBEAT_SCHEDULE
之前实例化它们时,它们是正确的。但是芹菜节拍实例化的那些都是不正确的。你知道吗
我在西芹IRC chan上问过,我得到的唯一回答是关于懒惰模式,但那是针对celery.beat.Scheduler
,而不是celery.schedules.schedule
,所以如果这是相关的,我不明白怎么做。我是否也必须扩展它,以便它正确地实例化计划?你知道吗
我试着用调试器挖掘芹菜代码,找出这些调度在哪里被实例化,但我找不到它。当他们从Unpickler
回来时,我可以看出他们错了,但我找不到他们是在哪里被创造出来的,也找不到他们是在哪里被腌制出来的。你知道吗
在Python调试器中使用了很多时间之后,我将问题缩小到芹菜.节拍.PersistentScheduler.sync()和/或搁置.sync()(前者称之为)。你知道吗
同步搁置时,值将丢失。我不知道为什么,但我很肯定这是芹菜或架子上的虫子。你知道吗
In any case, I wrote a workaround.
celery.schedules.schedule
有一个__reduce__
方法,用于定义如何使用pickle序列化和重构对象:https://github.com/celery/celery/blob/master/celery/schedules.py#L150-L151
pickle序列化将调用的对象时:
当它重建物体时,它会做:
因此,如果您已将新状态添加到自定义计划子类中,并作为参数传递给
__init__
,那么您将 还必须定义一个__reduce__
方法来接受这些 要考虑的新参数:相关问题 更多 >
编程相关推荐