Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 扩展芹菜.schedules.schedule对象不是';t传递额外的参数_Python_Python 2.7_Celery_Celerybeat - Fatal编程技术网

Python 扩展芹菜.schedules.schedule对象不是';t传递额外的参数

Python 扩展芹菜.schedules.schedule对象不是';t传递额外的参数,python,python-2.7,celery,celerybeat,Python,Python 2.7,Celery,Celerybeat,我编写了西芹.schedules.schedule接口的扩展,我不明白为什么在我创建的额外值中没有设置任何内容就实例化了它 当我在传递到app.conf.CELERYBEAT_SCHEDULE之前实例化它们时,它们是正确的。但是芹菜节拍实例化的所有内容都是不正确的 我在#Cellery IRC chan中询问,我得到的唯一回答是关于懒惰模式,但那是针对Cellery.beat.Scheduler,而不是Cellery.schedules.schedule,因此,如果相关的话,我不明白怎么做。我是

我编写了西芹.schedules.schedule接口的扩展,我不明白为什么在我创建的额外值中没有设置任何内容就实例化了它

当我在传递到
app.conf.CELERYBEAT_SCHEDULE
之前实例化它们时,它们是正确的。但是芹菜节拍实例化的所有内容都是不正确的

我在#Cellery IRC chan中询问,我得到的唯一回答是关于懒惰模式,但那是针对
Cellery.beat.Scheduler
,而不是
Cellery.schedules.schedule
,因此,如果相关的话,我不明白怎么做。我是否也必须扩展它,以便它正确地实例化计划


我试着通过调试器深入芹菜代码,找出这些计划在哪里被实例化,但我找不到它。当它们从
Unpickler
返回时,我可以看到它们是错误的,但我找不到它们是在哪里创建的,或者是在哪里被腌制的。

在Python调试器中运行了很多时间后,我将问题缩小到芹菜.beat.PersistentScheduler.sync()和/或shelve.sync()(前者调用)

同步搁置时,值将丢失。我不知道为什么,但我很确定这是芹菜或架子上的虫子


芹菜.schedules.schedule
有一个
\uuuuuuuuuuu\uuuuuu
方法,该方法定义如何使用pickle序列化和重构对象:

pickle序列化它将调用的对象时:

fun, args = obj.__reduce__()
当它重建对象时,它将执行以下操作:

obj = fun(*args)
因此,如果您已将新状态添加到自定义计划子类中,并作为参数传递给
\uuuu init\uuuu
,那么您将 还必须定义一个
\uuuuu reduce\uuuu
方法来接受这些 考虑到新的参数:

class myschedule(schedule):

    def __init__(self, run_every=None, relative=False, nowfun=None,
                 odds=None, max_run_every=None, **kwargs):
        super(myschedule, self).__init__(
            run_every, relative, nowfun, **kwargs)
        self.odds = odds
        self.max_run_every = max_run_every

    def __reduce__(self):
        return self.__class__, (
            self.run_every, self.relative, self.nowfun,
            self.odds, self.max_run_every)