首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >pybind11嵌入留下未清理的进程

pybind11嵌入留下未清理的进程
EN

Stack Overflow用户
提问于 2018-11-21 14:14:22
回答 1查看 116关注 0票数 1

sim_wrapper.h

代码语言:javascript
运行
AI代码解释
复制
#pragma once
#include <pybind11/embed.h>

namespace n_sim
{
    namespace py = pybind11;
    // __attribute__ needed for pybind to work
    class __attribute__((visibility("default"))) Sim
    {
    public:
        Sim();
        // python sim class instance we're using
        py::object sim;

    private:
        // python module want to load into our C++ code.
        py::module SimWrapModule;
        // Needed to initialize pybind. As soon as this goes out of scope, pybind is un-initialized.
        py::scoped_interpreter guard{};
    };
}

sim_wrapper.cpp

代码语言:javascript
运行
AI代码解释
复制
#include <iostream>
#include "sim_wrapper.h"

using namespace n_sim;

Sim::Sim()
{
    // import python module
    SimWrapModule = py::module::import("wrapper");
    // catch return values from python functions
    sim = SimWrapModule.attr("initialize_sim")();
}

int main()
{
    Sim* SimWrap = new Sim();
    py::str name = SimWrap->sim.attr("name");
    std::cout << name.cast<std::string>() << std::endl;
    return 0;
}

当这个程序运行时,它打印name并关闭程序,但它留下了三个未清理的进程。使用这些进程尝试了gstack,所有进程都有如下输出:

代码语言:javascript
运行
AI代码解释
复制
$ gstack 22763
#0  0x00000036f42df3c8 in poll () from /lib64/libc.so.6
#1  0x00007f012a43867b in poll_poll () from /opt/debesys/ext/linux/x86-64/release/lib/python2.7/lib-dynload/select.so
#2  0x00007f01346b50cb in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#3  0x00007f01346b65cd in PyEval_EvalCodeEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#4  0x00007f0134631190 in function_call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#5  0x00007f01345ff793 in PyObject_Call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#6  0x00007f01346b1956 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#7  0x00007f01346b65cd in PyEval_EvalCodeEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#8  0x00007f01346b5ab5 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#9  0x00007f01346b65cd in PyEval_EvalCodeEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#10 0x00007f01346b5ab5 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#11 0x00007f01346b65cd in PyEval_EvalCodeEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#12 0x00007f0134631265 in function_call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#13 0x00007f01345ff793 in PyObject_Call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#14 0x00007f01346b1956 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#15 0x00007f01346b65cd in PyEval_EvalCodeEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#16 0x00007f01346b5ab5 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#17 0x00007f01346b65cd in PyEval_EvalCodeEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#18 0x00007f0134631265 in function_call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#19 0x00007f01345ff793 in PyObject_Call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#20 0x00007f01346b1956 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#21 0x00007f01346b5b63 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#22 0x00007f01346b5b63 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#23 0x00007f01346b65cd in PyEval_EvalCodeEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#24 0x00007f0134631190 in function_call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#25 0x00007f01345ff793 in PyObject_Call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#26 0x00007f013460e21d in instancemethod_call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#27 0x00007f01345ff793 in PyObject_Call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#28 0x00007f013466ac6f in slot_tp_init () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#29 0x00007f01346697ef in type_call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#30 0x00007f01345ff793 in PyObject_Call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#31 0x00007f01346b2281 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#32 0x00007f01346b5b63 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#33 0x00007f01346b65cd in PyEval_EvalCodeEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#34 0x00007f01346b5ab5 in PyEval_EvalFrameEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#35 0x00007f01346b65cd in PyEval_EvalCodeEx () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#36 0x00007f0134631190 in function_call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#37 0x00007f01345ff793 in PyObject_Call () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#38 0x00007f01346aff67 in PyEval_CallObjectWithKeywords () from /opt/debesys/ext/linux/x86-64/release/lib/libpython2.7.so.1.0
#39 0x0000000000417299 in pybind11::detail::simple_collector<(pybind11::return_value_policy)1>::call(_object*) const ()
#40 0x0000000000413c48 in _ZNK8pybind116detail10object_apiINS0_8accessorINS0_17accessor_policies8str_attrEEEEclILNS_19return_value_policyE1EJEEENS_6objectEDpOT0_ ()
#41 0x00000000004054b7 in n_sim::Sim::Sim() ()
#42 0x00000000004055f5 in main ()

你知道要干净利落地运行这个程序需要做些什么吗?

EN

回答 1

Stack Overflow用户

发布于 2018-12-03 13:30:18

发生这种情况是因为Python模块持有的一些资源没有被释放。在python模块中编写了python函数stop,并在C++中对其进行了调用,解决了这个问题。

就在返回之前,我正在调用SimWrap->sim.attr("stop")();

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

https://stackoverflow.com/questions/53414013

复制
相关文章
Class文件访问标志&类索引
在常量池以后,紧接着是2个字节的访问标志,用来表示一个Class文件的基本访问信息,包括Class是类还是接口,是否被定义为public类型,是否被定义为abstract类型。具体如下图所示:
shysh95
2020/08/27
1K0
Class文件访问标志&类索引
python类(class)
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例,把所有相似的功能都封装到一个类里,最理想的情况是一个程序只有一个主程序,然后在程序里实例化类
py3study
2018/08/02
4720
python Class(类) and
Python类与面向对象    程序=指令+数据 (或算法+数据结构)。代码可以选择以指令为核心或以数据为核心进行编写。    两种类型        (1)以指令为核心:围绕“正在发生什么”进行编写(面向过程编程:程序具有一系列线性步骤;主体思想是代码作用于数据)以指令为中心,程序员的主要工作在于设计算法。        (2)以数据为核心:围绕“将影响谁”进行编写(面向对象编程OOP:围绕数据及为数据严格定义的接口来组织程序,用数据控制对代码的访问) 面向对象编程的核心概念     所有编程语言的最终目的都是提供一种抽像方法。     在机器模型("解空间"或"方案空间")与实际解决的问题模型("问题空间")之间,程序员必须建立一种联系。     (1)面向过程:程序=算法+数据结构     (2)面向对象:将问题空间中的元素以及它们在解空间中的表示物抽象为对象,并允许通过问题来描述问题而不是方案(可以把实例想象成一种新型变量,它保存着数据,但可以对自身的数据执行操作)     类是由状态集合(数据)和转换这些状态的操作集合组成     类:定义了被多个同一类型对象共享的结构和行为(数据和代码)     (1)类的数据和代码:即类的成员         数据:成员变量或实例变量         成员方法:简称为方法,是操作数据的代码,用于定义如何使用成员变量;因此一个类的行为和接口是通过方法来定义的。     (2)方法和变量:         私有:内部使用;公共:外部可见  面向对象的程序设计方法     所有东西都是对象;程序是一大堆对象的组合。     通过消息传递,各对象知道自己该做什么。
py3study
2020/01/15
9260
Pseudo elements伪元素与Pseudo classes伪类
::after用于描述处于css渲染层的一个伪元素,相当于选中元素的最后一个子元素,但这个元素与DOM节点无关,位于选择的元素之后,伪元素的内容用content属性描述。
gojam
2019/05/14
8720
python中类(class)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132732.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/14
5430
python中类(class)
Python中类(Class)使用
在Python中所有数据类型都可以被视为对象,而类(Class)是用来描述具有相同的属性和方法的对象的集合,所有它定义了每个集合中对象所共有的属性和方法。
算法与编程之美
2022/02/17
9960
python类class2021.9.15
发现一个现象是,数据挖掘案例并没有太多的类class,只用函数def就能跑完,但是Django等web应用就用到大量类。
用户7138673
2022/09/22
4970
python类class2021.9.15
python的类访问控制
在python类中,有属性和方法,外部代码可以直接通过实例来访问修改。 如果需要让内部的属性不被外部访问到,在属性变量前面加上__2个下划线。 在python中,实例的变量名如果是由__2个下花钱开头
小小科
2018/05/04
1.5K0
python的类访问控制
【说站】python字典的元素访问
当查询到相应的value值时,返回相应的值,当key值不存在时,返回None,代码不会出错。
很酷的站长
2022/11/23
1.2K0
【说站】python字典的元素访问
JS-获取class类名为某个的元素-【getClass】函数封装
原理:  根据class获取元素.  原理是,取出oparent下的所有元素,组成数组,然后遍历类名,全等判断。 源码 1 1 function getClass(oParent,clsName){ 2    var oParent = document.getElementById(oParent); 3 2 var boxArr = new Array(); 4 3 oElements = oParent.getElementsByTagName('*'); 5
xing.org1^
2018/05/17
5.2K0
python 类class基础简明笔记
class 定义一个类 class 定义一个类, 后面的类别首字母推荐以 大写 的形式定义,比如Calculator. 冒号不能缺 class可以先定义自己的属性,比如该属性的名称可以写为 name='Good Calculator'. class后面还可以跟def, 定义一个函数. 比如def add(self,x,y): 加法, 输出print(x+y). 其他的函数定义方法一样,注意这里的self 是默认值. class Calculator: #首字母要大写,冒号不能缺 nam
演化计算与人工智能
2020/08/14
4160
Class类
import java.io.ObjectOutput; public class DEmo { public static void main(String[] args) { Object object = new Object();//第一种方法 Class class1 = object.getClass(); System.out.println(class1.hashCode());//第二种方法 Class class2 = Object.class; System.
用户2965768
2019/03/15
6270
Class类
class 类
抽象类是 TypeScript 中的一种特殊类,它不能直接被实例化,只能被其他类继承或实现。抽象类主要用于定义一些共享的属性和方法,并且可以声明一些抽象方法,这些抽象方法必须在子类中被实现。
程序员王天
2023/10/18
1680
Class(类)
class 的本质是 function。 它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。
心念
2023/01/12
6760
【C++】类的封装 ④ ( 访问控制权限 | struct 和 class 关键字定义类的区别 | 类的默认访问权限 | 类的默认继承方式 )
在 C++ 语言中 , 使用 struct 和 class 关键字 , 都可以 用于定义 类 , 这些被定义的类 都 具有相似的语法和功能 , 只是在默认情况下有一些不同的行为 ;
韩曙亮
2023/10/15
2780
javascript类(class)
class Person {} Person.propName = 'person'
用户7043603
2022/02/26
5940
class类加载
Ryan-Miao
2021/12/28
6080
class类加载
Class类的getClassLoader()方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143817.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/26
4450
Class类文件的结构
本文介绍了Class文件的结构,包括魔数、版本号、常量池、访问标志、类索引、父类索引、接口索引集合、字段表集合、方法表集合、属性表集合等。此外,还介绍了公有设计和私有实现。
YGingko
2017/12/28
9120
点击加载更多

相似问题

如何使用Selenium和Python使用find_elements_by_class_name()单击元素

12

Python/Selenium -具有长类名的find_elements_by_class_name

13

访问python中加密列表的各个元素

11

使用python通过.find_elements_by_class_name过滤selenium选择的元素

140

Python: Selenium WebDriver find_elements_by_class_name

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档