问题标签 [cython]

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 投票
2 回答
15860 浏览

python - Cython 安装 GCC 错误

尝试在运行 Ubuntu Server 的小型 VPS 上安装 Cython。做过

接着

在 Cython 目录中,但我得到了这个特殊的错误。

为什么我需要“Python 的开发版本”?运行 Python 2.6.5(r265:79063,2010 年 4 月 16 日,13:57:41)。谢谢!

0 投票
2 回答
610 浏览

python - 数据损坏:错误在哪里‽

上次编辑:我已经弄清楚问题出在哪里(请参阅下面我自己的答案),但我无法将问题标记为已回答,看起来。如果有人可以回答我在下面的答案中提出的问题,即这是 Cython 中的错误还是此 Cython 的预期行为,我会将该答案标记为已接受,因为这将是从中获得的最有用的教训,恕我直言.


首先,我必须首先说我已经尝试了三天来解决这个问题,而我只是把头撞在墙上。尽我所能从文档中得知,我做事正确。显然,我不能正确地做事,因为如果我是,我不会有问题(对吧?)。

无论如何,我正在将 mcrypt 绑定到 Python。它应该适用于 Python 2 和 Python 3(尽管它未经 Python 2 测试)。它可以在我的网站上找到,链接是因为它太大而无法包含在帖子中,并且鉴于我不知道做错了什么,我什至无法隔离可能是问题代码的内容。显示问题的脚本也在我的网站上。该脚本只提供了 100 个块,除了字母“a”(加密算法/加密模式使用的任何块大小),当然应该得到一个“a”块作为往返的结果。但它不会(总是)。这是一次运行的输出:

奇怪的是,对于给定的(算法,模式)对,它是完全相同的。我可以更改算法,它会导致不同的往返,但是当我不更改算法时,每次运行总是相同的。我完全被难住了。此外,正如您在上面的输出中看到的那样,总是有两个块连续损坏:块 5 和 6、13 和 14 等。所以,有一个模式,但无论出于何种原因,我都无法弄清楚该模式准确地指向什么。

我意识到我可能在这里问了很多问题:我无法隔离一小段代码,并且可能需要熟悉 mcrypt 和 Python。唉,经过三天的努力,我需要稍微远离这个问题,所以我在这里发布这个问题,希望也许当我正在解决这个问题时,或者(a)某人将看到我在哪里引入了错误,(b) 当我稍后回到问题时,我将能够看到我的错误,或者 (c) 某人或我自己可以找到可能不是我的代码中的错误的问题,但是绑定过程或库本身中的错误。

我没有做的一件事是尝试使用另一个版本的 mcrypt 库。我正在使用 Cython 0.13、Python 3.1 和 mcrypt 2.5.8 进行工作,所有这些都由 Ubuntu 在 Ubuntu 10.10 中分发(除了 Cython,我从 PyPi 获得的)。但是我使用运行良好的 PHP 应用程序管理系统,并且在 Ubuntu 10.10 上使用 mcrypt 没有数据损坏,所以我没有理由相信它是 mcrypt 的构建,所以只是留下......好吧,我在某个地方出了点问题, 我认为。

无论如何,我非常感谢任何可以提供帮助的人。我开始觉得自己快疯了,因为我已经连续几天一直在研究这个问题,我觉得解决方案可能就在我面前,但我看不到它。

编辑:有人指出我应该使用 memcpy 而不是 strncpy。我这样做了,但是现在,测试脚本显示每个块都不正确。让我比以前更加困惑……这是pastebin上的新输出。

编辑 2:我已经回到计算机并再次查看它,我只是在各处添加打印语句以查找可能出错的地方。raw_encrypt.step(input) 函数中的以下代码:

第一个打印语句显示了预期的内容,即传入的明文。但是,第二个显示了完全不同的内容,它应该是相同的。似乎 Cython 发生了一些我不完全理解的事情。

0 投票
2 回答
14033 浏览

arrays - 将 Numpy 数组传递给用 Cython 包装的 C 代码

我有一小部分想要使用 Cython 包装的现有 C 代码。我希望能够设置许多 numpy 数组,然后将这些数组作为参数传递给 C 代码,其函数采用标准 c 数组(1d 和 2d)。在弄清楚如何编写正确的 .pyx 代码来正确处理事情方面,我有点卡住了。

有一些函数,但文件 funcs.h 中的一个典型函数如下所示:

然后我有一个具有相应行的 .pyx 文件:

我摆脱了const因为 cython 不支持它。我被卡住的地方是包装器代码应该是什么样子,然后将 MxN numpy 数组传递给 **coords1 和 **coords2 参数。

我一直在努力为此类问题找到正确的文档或教程。任何建议将不胜感激。

0 投票
1 回答
4546 浏览

c++ - 如何在 Cython 中正确管理 C++ 对象的生命周期?

在为 C++ 库编写 Cython 包装器时,我遇到了一个不清楚如何正确决定何时删除某些 C++ 实例的情况。

C++ 库看起来像这样:

这个库的一个重要方面是Sprocket析构函数使用Widget*它被给定的,所以在它Widget之前不能被销毁Sprocket

我编写的 Cython 包装器如下所示:

像这样构建 Python 构建后:

在微不足道的情况下,它似乎有效:

cdef Widget场保持活力,PyWidget直到PySprocket.__dealloc__摧毁Sprocket. 但是,一旦涉及到 Python 垃圾收集,tp_clearCython 构造的函数就会搞砸PySprocket

由于存在引用循环,垃圾收集器调用tp_clear来尝试打破循环。Cythontp_clear删除了对 Python 对象的所有引用。只有在这种情况发生后PySprocket.__dealloc__才能运行。

Cython 文档发出警告__dealloc__(尽管我花了一段时间才知道它在谈论什么条件,因为它没有详细说明)。所以也许这种方法是完全无效的。

Cython 可以支持这个用例吗?

作为(我希望是)一个临时的解决方法,我已经转向一种看起来像这样的方法:

换句话说,隐藏 Cython 的引用,使其在 中仍然有效__dealloc__,并手动对其进行引用计数。

0 投票
10 回答
28144 浏览

python - 我应该如何构建包含 Cython 代码的 Python 包

我想制作一个包含一些Cython代码的 Python 包。我的 Cython 代码运行良好。但是,现在我想知道如何最好地打包它。

对于大多数只想安装包的人,我想包含.cCython 创建的文件,并安排setup.py编译该文件以生成模块。然后用户不需要安装 Cython 来安装包。

但是对于可能想要修改包的人,我还想提供 Cython.pyx文件,并且以某种方式还允许setup.py使用 Cython 构建它们(因此这些用户需要安装 Cython)。

我应该如何构建包中的文件以适应这两种情况?

Cython文档提供了一些指导。但它并没有说明如何制作一个setup.py同时处理有/没有 Cython 情况的单曲。

0 投票
1 回答
6383 浏览

cython - Cython:从外部 C 文件调用函数

在 Cython 的“Hello World”和在此处调用 C 数学库中的函数的示例之后,我真正想做的是将我自己的 C 代码放在一个单独的文件中并从 Cython 使用它。在之后,我修改 setup.py 文件:

这是 hello2.c (main 只是为了单独编译和测试它——尽管该产品不存在于测试中:

这是 hello2_caller.pyx

我得到:

因此,我想我无法以某种方式提供标头.. 尽管仅向 setup.py 提供像“hello2.h”这样的标准标头是行不通的。您能否指出一个可行的示例或解释我做错了什么。谢谢。

0 投票
2 回答
9827 浏览

python - Django 异步处理

我有一堆 Django 请求,它们执行一些数学计算(用 C 编写并通过 Cython 模块执行),这可能需要不确定的时间(大约 1 秒)来执行。此外,请求不需要访问数据库,并且彼此独立且 Django。

现在一切都是同步的(使用带有sync工作类型的 Gunicorn),但我想让它异步且非阻塞。简而言之,我想做一些事情:

  1. 接收 AJAX 请求
  2. 将任务分配给可用的工作人员(不阻塞主 Django Web 应用程序)
  3. 工人在未知的时间内执行任务
  4. 每当任务完成时,Django 将计算结果(字符串列表)作为 JSON 返回

我对异步 Django 很陌生,所以我的问题是这样做的最佳堆栈是什么。

任务队列非常适合这种过程吗?有人会推荐 Tornado + Celery + RabbitMQ,还是别的什么?

提前致谢!

0 投票
2 回答
376 浏览

c++ - C 中是否有一组用于动态字符串、列表和字典的标准库?

我有兴趣进入 C 以接近金属性能,但想以 Pythonic 风格编写,不想滚动我自己的动态字符串、列表和字典。Cython 非常好,但如果可能的话,想知道如何在直接 C 中使用动态变量。

对于 C++,当然有 STL,它将为您提供 String、Vector 和 Map。当然,一种可能性是在 C++ 中以类 C 风格进行编程,仅使用这些功能。如果您需要 C 中的动态变量,这是标准做法吗?

0 投票
3 回答
10601 浏览

python - 以 numpy 数组为参数的 Cython 内联函数

考虑这样的代码:

我使用 ipython 来测量 test1 和 test2 的速度:

有没有办法优化test1?为什么 cython 不按照所说的内联这个函数?

更新:实际上我需要的是这样的多维代码:

时间安排:

显式内联可提供 300 倍的加速。而且我的真实函数很大,所以内联它使代码的可维护性变得更糟

更新2:

时间:

0 投票
1 回答
473 浏览

c - Cython - 正确声明 C funs

我无法运行一个简单的示例。

我正在使用它在 Cython 中声明一个来自cinterf.h标头的函数:

C头文件中的声明是:

DllExport 和 call_conv 都是在别处定义的宏,并解析为 GCC 编译器指令。
我是否必须在 cdef 中也使用它们才能完全匹配声明?

当我打电话xsb_init_string()时:

python解释器给了我:

xsb_init_string()是否在 cdef 中正确声明了签名?