当进程退出时,python多处理是否调用静态变量的c++析构函数?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

2019-12-27 10:16:12 752 1

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

取消 提交回答
全部回答(1)
  • peter517517
    2020-02-09 10:45:25

    我所看到的行为表明答案是:

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

    0 0
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144752浏览量 回答数 40

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 147260浏览量 回答数 22

41

回答

OSS FTP工具发布啦

oss-dev 2015-12-23 16:58:56 66208浏览量 回答数 41

42

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 137077浏览量 回答数 42

58

回答

技术入门问答集锦,涉及多种技术方向,解决新人学习困惑

管理贝贝 2016-08-03 10:13:27 52763浏览量 回答数 58

23

回答

【云服务器分享】网站访问速度快才是硬道理

dreamdoo 2012-10-15 10:15:02 85376浏览量 回答数 23

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305667浏览量 回答数 249

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 475784浏览量 回答数 24

30

回答

基础语言百问-Python

薯条酱 2017-05-17 18:01:13 65217浏览量 回答数 30

21

回答

OSS新手视频教程!

聚小编 2013-01-14 18:09:51 58311浏览量 回答数 21
+关注
0
文章
13401
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载