首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自引用几个不同的对象而不是一个

自引用几个不同的对象而不是一个
EN

Stack Overflow用户
提问于 2018-06-22 15:23:20
回答 1查看 34关注 0票数 1

我有一个类,它有一个创建时间表的方法(为了简单起见,它被简化了):

代码语言:javascript
复制
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_1function_2方法:

代码语言:javascript
复制
def function_1(self, *args):
    print('self in function_1:', self)

def function_2(self, *args):
    print('self in function_2:', self)

出于某种原因,当它从调度程序执行两个事件时,将打印以下内容:

代码语言:javascript
复制
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实际上指向同一个实例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-22 15:32:03

您用apscheduler注册了两个不同的事件,在配置中存储事件回调信息https://apscheduler.readthedocs.io/en/latest/userguide.html#basic-concepts

作业商店存放预定的作业。默认作业存储只是将作业保存在内存中,而其他作业则存储在各种类型的数据库中。作业数据在保存到持久作业存储区时被序列化,并在从它加载回时反序列化。

大胆强调我的。

您拥有的两个作业是独立执行的,因此它们被独立地反序列化,从而导致从序列化数据创建两个新实例。

不能指望单独的事件来处理同一个实例。您需要将状态外部化,方法是添加足够的标识信息,以便在作业触发时重新创建状态。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50991142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档