开发者社区> 问答> 正文

当进程退出时,python多处理是否调用静态变量的c++析构函数?

注意:本例使用单例模式。人们可能会有理由质疑这样做是否明智,然而,就这个问题而言,如果我们能接受遗产的负担并忽略它,我将不胜感激。谢谢。 父进程导入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

展开
收起
kun坤 2019-12-27 10:16:12 1777 0
1 条回答
写回答
取消 提交回答
  • 我所看到的行为表明答案是:

    不,当父进程退出时,不会调用单例的析构函数。 这真是令人惊讶。至少我希望在父级退出时调用atexit来调用析构函数,但它没有这样做。我确认,如果单例是在父进程本身中创建的,则单例的析构函数将在退出时被调用。

    2020-02-09 10:45:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载