问题标签 [python-c-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1018 浏览

python - 在linux中使用ctypes链接c++和python

我正在用python编写一个程序。现在我想使用 ctypes 来使用我在 c++ 中拥有的类的一些功能。所以基本上,我在 python 中有一个数据数组。我在 c++ 中有另一个程序,它应该使用该数组并将其转换为图像类。这是我在 C++ 中的程序。我已经在linux中制作了makefile并且可以编译。

文件名是“pclink.cpp”

我还制作了 .so 和 .o 文件,一切看起来都很好。但是当我在 python 中输入

这是我收到的信息

以前我试图将 c++ 和 python 与一个没有任何类的简单程序链接,它工作正常。似乎问题是当我尝试从另一个类定义对象时。所以有人知道如何解决这个问题吗?谢谢

0 投票
1 回答
565 浏览

python - 如何将python对象传递给C扩展并在里面调用它的方法?

假设我有一个带有方法“m()”的python对象“o”,我想将它传递为:

显然最后评论的行没有编译,我想知道是否有办法实现这一点。

0 投票
1 回答
1131 浏览

python - 如何将 python 列表传递给 C 扩展函数并附加一些值?

假设我有一个 python 列表:

我想将它传递给以下 C 扩展:

我只是想知道如何在注释行中修改上述功能以实现我想要做的事情。

0 投票
1 回答
2970 浏览

python - 如何将 Python C 扩展中的 PyObject 转换为字符串类型?

只是找不到合适的功能。谢谢你的建议。

0 投票
1 回答
886 浏览

python - 如何在 Python C 扩展中巧妙地将 char[] 传递给 PyObject_CallMethod

我有一个名为“m1”的python 对象,它有一个方法“coor()”。我将把它传递给 C"++" 扩展并在里面调用"coor()"。首先我试过:

并发现以下尴尬的代码有效:

我相信有一种简单的方法可以做到这一点。对于初学者来说,这可能是一个关于 char[] 的 C 问题,感谢您的建议。

0 投票
2 回答
2544 浏览

python - 在 Python C 扩展中处理 PyList_Append 时丢失 Py_DECREF/INCREF

在处理 PyList_Append 时,我迷失了 Py_DECREF/INCREF。任何人都可以对以下代码发表评论吗?

0 投票
4 回答
7244 浏览

python - 如何在运行时复制 python 模块?

我需要制作一个套接字模块的副本才能使用它,并为另一个套接字模块进行猴子修补并以不同的方式使用它。

这可能吗?

我的意思是真正复制一个模块,即在运行时获得与复制相同的结果socketmodule.c,将initsocket()函数更改为initmy_socket(),并将其作为my_socket扩展安装。

0 投票
2 回答
138 浏览

python-c-extension - 是否可以在 Python C 扩展中包含 socketmodule.h?

我想在我的 Python C 扩展中调用 socketmodule.h 中定义的 PySocketModule_ImportModuleAndAPI 函数。

0 投票
0 回答
126 浏览

python - 并行 python 工作者优雅失败

在使用 pp 并行化一个非常复杂的机器学习问题时,我发现自己不得不相当广泛地依赖质量参差不齐的第三方库。特别是在不同的数据集上密集使用时,会出现大量的边缘情况崩溃。我最终将不得不解决这些问题,但在短期内,尝试修复我和他们的错误太多了——而这个库确实是最好的。

我的问题是:是否有一种既定模式可用于允许 pp 中本地工作进程正常失败?

我看到的选项是:

  1. 不要使用任何本地工作进程,只使用远程工作人员 - 然后依赖套接字超时。
  2. Shell 都运行到一个辅助 python 脚本,我将它包装并作为一个单独的进程执行,然后只需使用退出代码来检查崩溃。这可能还必须与超时结合起来以防止非段错误故障情况。

我在这里错过了什么吗?我一直在查看 pp.py ,据我所知,工作进程没有退出检测。

0 投票
2 回答
552 浏览

python - Python 内存不足(使用后缀树)

我在一些代码上遇到了一些麻烦。请记住,我是一个糟糕的程序员,所以我的解决方案可能不是很有说服力(这可能是我内存不足的原因 - 我有 4 GB 并且脚本会慢慢填充它)。

这就是问题所在。我在一个目录中有大约 3,500 个文件。每个文件由一行组成,该行可以包含相对较少或许多没有空格的字符(最小的文件为 200 字节,而最大的文件为 1.3 兆字节)。我想要做的是在设定长度的两个文件之间找到一个公共子字符串(在下面的代码中它是 13 个字符)。我一次做两个,因为我不是在所有这些中寻找一个共同的子字符串,而是在比较所有文件之前两个的组合。即,文件之间设置长度的任何公共子字符串,而不是所有文件共有的子字符串。

我使用了一个包装了 C 实现的后缀树模块(在这里)。首先,我列出目录中的所有文件,然后查找两个文件的组合以覆盖所有组合,一次将两个文件传递给后缀树,然后查找作为公共子字符串的序列。

但是,我真的不知道为什么它会慢慢耗尽内存。我希望我们可以对代码进行修改,以便它以某种方式清除未使用内容的内存?显然,处理 3,500 个文件需要很长时间,但我希望无需增量填充 4 GB 内存就可以做到。任何帮助将不胜感激!这是我到目前为止的代码:

更新#1

这是更新的代码。我添加了 Pyrce 提出的建议。然而,在 jogojapan 发现 C 代码中的内存泄漏之后,鉴于这超出了我的专业知识范围,我最终采用了一种慢得多的方法。如果有人在这方面知识渊博,我真的很想知道如何修改 C 代码以修复内存泄漏或释放函数,因为我认为 Python 的 C 后缀树绑定非常有价值。在没有后缀树的情况下通过这个脚本运行数据可能需要几天时间,所以我绝对愿意看看是否有人有创造性的修复!