问题标签 [c-api]

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 回答
631 浏览

tensorflow - Tensorflow c api 跟踪数据

我想知道如何使用 C API Tensorflow 从 Session 运行中获取 FULL_TRACE 数据。我的问题是我找到了 python 示例,但我不知道如何使用 C API 来实现它。

蟒蛇示例:

使用完整跟踪选项运行图表

C API 函数。

TF_CAPI_EXPORT 外部无效 TF_SessionRun(

感谢帮助。

0 投票
1 回答
749 浏览

string - 如何通过 C API 从 Python 3 异常中提取字符串

我有一些使用 Boost.Python 运行 Python 3 代码的 C++ 代码。如果 Python 中发生任何异常,则会捕获该异常并抛出 C++ 异常。我想将一些最小的错误信息传递给 C++ 异常。

我目前拥有的是这样的:

SO 这里有很多有用的答案,但它们似乎都适用于 Python 2,并且它们的解决方案不再起作用。我已经尝试了一些类似PyBytes_AsString,的东西PyUnicode_AsUTF8,但我得到的只是空指针。

我该如何从中提取有意义的东西pvalue?对于初学者来说,引发异常的类型名称已经很有帮助了。如果有一个字符串传递给异常,那么获取它将是最有帮助的。

0 投票
0 回答
288 浏览

postgresql - PQgetvalue() 从 string_agg() 的结果中去除空格

我有一个使用 PostgreSQL API 的 GNU C++ 项目,出于某种原因,它从某个查询的结果中去除了空格。其他环境(psql和 pgAdmin)没有。查询是:

注意分隔符中逗号后面的空格。1046976, 1046977我没有被 退回,而是PQgetvalue()得到1046976,1046977。只是为了好玩,我尝试将分隔符更改为愚蠢的东西,例如string_agg(my_varchar, ',:) 'and string_agg(my_varchar, ', :)'。如果空格位于分隔符的中间,它不会剥离空格。

psql同样,如果我在 db 浏览器和 pgAdmin中执行相同的查询,我不会遇到这个问题;他们不会剥离任何这些查询中的空间。

是的,我考虑过这样的可能性,因为它们从中提取的列是varchars,但数据是 7 位整数,引擎可能会混淆。我将查询更改为真正的 a varchar,但空格仍然被剥离。

查看https://www.postgresql.org/docs/9.4/static/functions-aggregate.html,我看到string_agg()它的参数应该是texts 或byteas。好吧,我从来没有遇到过错误,但可以肯定的是,我尝试了string_agg(my_varchar::text, ', '::text). 这并没有什么不同。

我对这个 API 了解不多,但它似乎没有使用任何选项连接到数据库,所以我认为关于配置没有太多可说的。

我在 Debian 8.10 上的 GNU C++ v4.9.2 中运行它。PostgreSQL 引擎和 API 是 9.4。

0 投票
0 回答
363 浏览

python - 调用 Python C/API 的 DLL 存在依赖问题

这个问题是我今天在CTypes error loading DLL that calls another DLL 上发布的问题的部分解决方案。我将其作为单独的帖子发布,因为问题在于与 Python C/API 的依赖关系,而不是我发布的源代码中。

我有一个 64 位 NASM dll,它在 Windows 7 上调用 64 位 C dll。C dll 使用 Python C/API;NASM dll 使用 CTypes 调用。但是,当我在 Visual Studio 中使用 ctypes 加载 NASM dll 时,我收到错误“[WinError 126] 找不到指定的模块”。C dll 是在 MSYS2 中使用 GCC 编译的。

将 NASM dll 调用到 Dependency Walker 中显示缺少 libpython3.6m.dll 和 libwinpthread-1.dll。这些 dll 在 MSYS2 的发行版中,所以我将它们从那里复制到包含 NASM dll 的文件夹中。这解决了这个问题,但现在 Dependency Walker 说它缺少所有这些 DLL:

API-MS-WIN-CORE-COM-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1- 0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING -L1-1-0.DLL
DCOMP.DLL
IESHIMS.DLL

这个问题似乎与 Python C/API 有关,它显然依赖于这些 DLL。有谁知道如何解决这一问题?完整的源代码在上面的链接中。

0 投票
0 回答
50 浏览

python - 通过C优化核心python类

这更像是一个概念问题,而不是特定的代码问题。我们正在考虑优化 Python 代码中的一些较低级别的“核心”类。当前有一个类,它本质上存储了一个特征字典,以及每个特征的排序列表。需要注意的是,特征代表的可能是任何数据类型。

例子:

此类主要是实用函数,用于在特定条件下查找数据字段中的值。

方法如:

get_first_value_after(feat, val) - 给定一个特征和一些数字,找到 data[feat] 中索引 > val 的第一个条目。

get_values_in_range(feat, start_val, end_val) - 给定一个范围,找到索引在 start_val 和 end_val 之间的 data[feat] 的所有部分。

等等等等。

我正在考虑优化这个类以尽可能提高性能,因为它在我们的很多堆栈中被调用。我一直在考虑合并 C,因为理论上这会带来一些收益,但似乎有很多方法可以扩展到 C,我不确定该走哪条路。

在我的头顶上:

  1. Ctypes 函数 - 在 C 中创建函数而不引用 python 头文件。一切都将使用本机 c,并通过 ctypes.CDLL 调用使用。期望 python 在传入之前进行 ctype 转换。

  2. C 函数模块 - 创建一个使用 pythons C API 并正确返回 PyObjects 的辅助函数模块。然后在我上面的课程中,我只是制作传递给 c 模块函数的方法

    def get_first_val_after(self, feat, val): return get_first_val_after_c(self.data[feat], val)

  3. 用 C 重写整个类——这将允许我们的底层数据结构是原生的 c,并且函数可能会更快。

我对 1 和 2 有一点经验,但我以前从未做过 3,我希望有人能够让我深入了解哪些可能会产生最佳结果。

先感谢您。

编辑:如下所述,我们目前对整个文件进行cythonize。我正在寻找测试是否扩展到 C 本身会产生更好的结果。

0 投票
1 回答
119 浏览

tensorflow - 如何使用 C_API 导入训练有素的 DNNClassifier

我已经使用 Python(conda tensorflow 安装)训练了 DNNClassifier。训练后的模型需要使用 C_API 进行评估。有没有办法使用 C_API 加载训练模型的图形和权重?

0 投票
1 回答
167 浏览

python - 如何使用 C_API 导入训练有素的 tf.contrib.learn.dnnclassifier

如何使用 C_API 导入经过训练的 DNNClassifer?我尝试使用 TF_LoadSessionFromSavedModel,但它引发了以下错误:

我 tensorflow/cc/saved_model/loader.cc:284] 加载 SavedModel:失败。

这是代码的C部分:

0 投票
1 回答
790 浏览

cython - 如何从 C 访问 asyncio / uvloop 循环

我对 python 完全陌生,但是有一个使用 uvloop 的异步 python 应用程序,它使用我创建的 C api 模块,它也需要访问异步循环。

1) asyncio 还没有用于此的 c-api?有什么技巧可以在 C 中使用事件循环吗?这在任何地方都在讨论吗?

2) uvloop 使用我在 C 中熟悉的 libuv。如果我能抓住 uv_loop_t 指针,我就可以挂钩到循环中。我想我可以:

A) 使用 PyObject * 到 uvloop 的循环计算到 uv_loop_t* 的偏移量并使用它?假设我知道 PyObject_HEAD 的长度?

B) 或者非 hacky 修改 uvloop 以暴露循环指针。我在这里完全一无所知,因为我从未看过 cython 代码。我可以在循环上创建一个 python 函数,从我的 C 代码中调用它并获取 C 指针吗?喜欢:

通过将 getLoop 添加到此处:

https://github.com/MagicStack/uvloop/blob/master/uvloop/loop.pyx

0 投票
1 回答
102 浏览

python - 使用 Python v3.x 和 C API 解释 Python v2.5 代码(关于整数除法)

我有一个无法控制的 v2.5 Python 代码,因为它是从支持 Python v2.5 的第三方软件导出的。

我的机器上有 Python v3.3,我想以某种方式使用 C API 模拟 v2.5。我主要关心的是 v2.x 和 v3.x 之间不同的整数除法。

例如我有下面的代码:

我希望以某种方式将其解释为(使用 v3.x):

我能做点什么吗?有没有办法像我有 Python v2.5 一样解释代码?我想 2to3 脚本不适用于我的情况,六个模块也不适用。

我还发现了与我相关的这个问题: Python 2 and Python 3 dual development

谢谢

0 投票
0 回答
402 浏览

error-handling - Lua C-API:在lua函数调用期间发生错误时获取行

当我lua_pcall从 C++ 调用Lua-function时,我通常会这样做:

这很好,但不足以确定我的 lua 代码中的确切错误。这是我的终端输出:

您如何检索有关每个错误的更多信息(例如代码行)?