注意:本例使用单例模式。人们可能会有理由质疑这样做是否明智,然而,就这个问题而言,如果我们能接受遗产的负担并忽略它,我将不胜感激。谢谢。 父进程导入mulitprocessing模块并创建子进程。然后,父进程等待子进程加入,然后到达程序的末尾退出。 子进程调用C/ c++扩展来使用new创建c++对象。单例模式实现如下:
class MyClass {
public :
static MyClass* getInstance() {
static MyClass* instance = getShared().get();
return instance;
}
private :
static std::shared_ptr<MyClass> getShared() {
static std::shared_ptr<MyClass> sptr(new MyClass());
return sptr;
}
}
指向新分配的单例对象的指针不会返回给python子进程。子进程通过到达函数的末尾退出,并在该处加入正在等待的父进程。 我所看到的行为表明,答案是: 这是令人惊讶的。当父类退出并调用析构函数时,至少我希望调用atexit,但它并没有这样做。我确认过,如果单例是在父进程本身中创建的,那么在退出时将调用单例的析构函数。 我现在想知道这是不是python多处理模块的某种bug ?这是在python 3.6中。 另外,当子元素退出时,是否有方法强制调用单元素的析构函数? 问题来源StackOverflow 地址:/questions/59383604/does-python-multiprocessing-call-c-destructors-of-static-variables-when-the-pr
我所看到的行为表明答案是:
不,当父进程退出时,不会调用单例的析构函数。 这真是令人惊讶。至少我希望在父级退出时调用atexit来调用析构函数,但它没有这样做。我确认,如果单例是在父进程本身中创建的,则单例的析构函数将在退出时被调用。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。