我有一个类,它有一个创建时间表的方法(为了简单起见,它被简化了):
def create_schedule(self):
# Create a function-1 event
scheduler.add_job(self.function_1,
trigger='date',
run_date=datetime_1,
args=[self])
# Create a function-2 event
scheduler.add_job(self.function_2,
trigger='date',
run_date=datetime_2,
args=[self])这些是类function_1和function_2方法:
def function_1(self, *args):
print('self in function_1:', self)
def function_2(self, *args):
print('self in function_2:', self)出于某种原因,当它从调度程序执行两个事件时,将打印以下内容:
self in function_1: <program.my_class object at 0x6f03e430>
self in function_2: <program.my_class object at 0x6f03e4b0>也就是说,这两个对象是不同的,因此function_1所做的更改不会出现在function_2中,反之亦然。
为什么会这样呢?难道不是self指出的所有实例都是相同的吗?是否有一种方法可以避免这种情况,并强制所有selfs实际上指向同一个实例?
发布于 2018-06-22 15:32:03
您用apscheduler注册了两个不同的事件,在配置中存储事件回调信息https://apscheduler.readthedocs.io/en/latest/userguide.html#basic-concepts。
作业商店存放预定的作业。默认作业存储只是将作业保存在内存中,而其他作业则存储在各种类型的数据库中。作业数据在保存到持久作业存储区时被序列化,并在从它加载回时反序列化。。
大胆强调我的。
您拥有的两个作业是独立执行的,因此它们被独立地反序列化,从而导致从序列化数据创建两个新实例。
不能指望单独的事件来处理同一个实例。您需要将状态外部化,方法是添加足够的标识信息,以便在作业触发时重新创建状态。
https://stackoverflow.com/questions/50991142
复制相似问题