小编Bru*_*ira的帖子

如何在包装函数之前和之后执行函数和成员函数来编写包装器?

我正在尝试编写一些包装类或函数,它允许我在包装函数之前和之后执行一些代码.

float foo(int x, float y)
{
    return x * y;
}

BOOST_PYTHON_MODULE(test)
{
     boost::python::def("foo", <somehow wrap "&foo">);
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,包装器应该是通用的,适用于函数和成员函数,具有任何签名.

更多信息:

我正在寻找一种简单的方法来释放/重新获取围绕我昂贵的C++调用的GIL,而无需手动编写像这样的瘦包装器:

float foo_wrapper(int x, float y)
{
    Py_BEGIN_ALLOW_THREADS
    int result = foo(x, y);
    Py_END_ALLOW_THREADS
    return result;
}

BOOST_PYTHON_MODULE(test)
{
     boost::python::def("foo", &foo_wrapper);
}
Run Code Online (Sandbox Code Playgroud)

对于所有类型的函数,这种包装器将重复多次,我想找到一个允许我避免编码所有函数的解决方案.

我尝试了一些方法,但我能提供的最好的方法是要求用户明确说明返回值和参数的类型,例如:

boost::python::def("foo", &wrap_gil<float, int, float>(&foo_wrapper));
Run Code Online (Sandbox Code Playgroud)

但在我看来应该可以只是将指针传递给函数(&foo_wrapper)并让编译器找出类型.

有谁知道我可以使用的技术或指向正确的方向?

干杯!

c++ python binding wrapper boost-python

8
推荐指数
1
解决办法
3542
查看次数

在经典映射风格中使用多态类

文档中关于加入继承示例使用了声明性映射。我正在尝试将其调整为使用“经典映射”,但无法正常工作。

我已经阅读并使用了https://docs.sqlalchemy.org/en/14/orm/inheritance.html 中的文档作为指南。

我有一些简单的类使用attrs

class Person:
    pass


@attr.s(auto_attribs=True)
class Manager(Person):
    name: str
    data: str


@attr.s(auto_attribs=True)
class Engineer(Person):
    name: str
    info: int


@attr.s(auto_attribs=True)
class Company:
    people: list[Person]
Run Code Online (Sandbox Code Playgroud)

我声明映射和表如下:

persons_table = Table(
    "person",
    metadata,
    Column("id", Integer, primary_key=True),
)

managers_table = Table(
    "manager",
    metadata,
    Column("id", Integer, primary_key=True),
    Column("name", String(50)),
    Column("data", String(50)),
)

engineers_table = Table(
    "engineer",
    metadata,
    Column("id", Integer, primary_key=True),
    Column("name", String(50)),
    Column("info", Integer),
)


company_table = Table(
    "company",
    metadata,
    Column("id", Integer, primary_key=True),
)

pjoin …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy

5
推荐指数
1
解决办法
48
查看次数

使用命令行发现丢失的模块(“DLL 加载失败”错误)

在 Windows 上,当我们尝试导入一个文件,但找不到所依赖的.pydDLL 时,我们会得到以下回溯:.pyd

Traceback (most recent call last):
  ...
ImportError: DLL load failed: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)

发生这种情况时,通常必须求助于依赖关系等图形工具来找出丢失模块的名称。

如何通过命令行获取缺少的模块名称?

上下文:我们经常在 CI 中遇到此错误,通过 SSH 登录来查找丢失的模块名称会更容易,而不是通过 GUI 登录。

python windows dll pyd

5
推荐指数
1
解决办法
1680
查看次数

标签 统计

python ×2

binding ×1

boost-python ×1

c++ ×1

dll ×1

pyd ×1

sqlalchemy ×1

windows ×1

wrapper ×1