![]() |
1
120
我最近包了一个 FTDI 我们以前使用的是第三方模块, PyUSB ,目的相同。PyUSB是一个实际的C/Python扩展模块。但是PyUSB在执行阻塞读写操作时没有释放GIL,这给我们带来了问题。因此,我使用ctypes编写了我们自己的模块,它在调用本机函数时会释放GIL。
有人这样做了 some benchmarks 如果我不得不用大量的类/模板来包装C++库,我可能会更加犹豫,但是cType与结构非常好,甚至可以。 callback 变成Python。 |
|
2
165
警告:Cython core开发者的意见在前面。
因此,ctypes很适合做简单的事情并快速运行。然而,一旦事情开始发展,你很可能会注意到你最好从一开始就使用Cython。 |
![]() |
3
102
为了获得一些优化,您必须开始告诉Cython关于代码的其他事实,例如类型声明。如果你告诉它足够多,它可以把代码归结为纯C。也就是说,Python中的for循环变成了C中的for循环。在这里你会看到巨大的速度提升。您也可以在此处链接到外部C程序。 使用Cython代码也非常简单。我觉得这本手册听起来很难。你实际上只是做:
然后你就可以
无论如何,因为Cython很容易安装和开始使用,我建议试试看它是否适合您的需要。如果它不是你要找的工具,那就不会是浪费。 |
![]() |
4
42
cffi 这是一个新的选择 ctypes
|
![]() |
5
21
|
![]() |
6
18
就我个人而言,我会用C编写一个扩展模块。不要被PythonC扩展吓倒——它们一点也不难编写。文档非常清晰,非常有用。当我第一次用Python编写一个C扩展时,我想我花了大约一个小时的时间才弄明白如何编写一个C扩展——根本没花多少时间。 |
![]() |
7
11
ctypes 当您已经有一个编译过的库blob要处理时(例如OS库),这是非常好的。然而,调用开销非常大,因此如果您要对库进行大量调用,并且无论如何都要编写C代码(或者至少要编译它),我会说 cython Boost.Python . Python的设置可能会很挑剔,但一旦您让它工作起来,它就可以让包装C/C++代码变得简单。 cython也擅长包装 numpy (这是我从 SciPy 2009 proceedings ),但我还没有用过numpy,所以我不能对此发表评论。 |
![]() |
8
11
我认为Cython或用C创建扩展模块(这不是很难)在需要新代码时更有用,例如调用该库并执行一些复杂、耗时的任务,然后将结果传递给Python。 对于简单程序,另一种方法是直接执行不同的进程(外部编译),将结果输出到标准输出,并使用子进程模块调用它。有时这是最简单的方法。 例如,如果你制作了一个控制台C程序,它或多或少都是这样工作的
你可以从Python中调用它
|
![]() |
9
8
使用ctypes,结果根本不取决于您使用的编译器。您可以或多或少地使用任何可以编译为本机共享库的语言编写库。哪种系统、哪种语言、哪种编译器都无关紧要。然而,Cython受到基础设施的限制。例如,如果你想在windows上使用英特尔编译器,那么让cython工作起来就要复杂得多:你应该向cython“解释”编译器,用这个编译器重新编译一些东西,等等。这大大限制了可移植性。 |
![]() |
10
4
如果你瞄准Windows并选择包装一些专有的C++库,那么你可能很快就会发现不同版本的
这意味着您可能无法使用
因此有很多小细节,在下面的文章中有详细的描述: “美丽的本地图书馆 (Python语言) ": http://lucumr.pocoo.org/2013/8/18/beautiful-native-libraries/ |
![]() |
11
3
我知道这是一个老问题,但当你在谷歌上搜索像
在过去的两天里,我一直在寻找一种方法,将我代码中性能较高的部分委托给比python更低级的东西。我在两个方面都实现了我的代码
字符串列表
这需要处理。通知
这是我的判决。使用
为了记录在案,我当然没有衡量我投资的确切时间。很可能是这样的,我对时间的感知有点过于专注,这是因为我在处理ctypes时需要付出精神上的努力。但它应该传达出处理问题的感觉
|
![]() |
12
2
还有一种可能使用 GObject Introspection 对于正在使用 GLib . |
![]() |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
![]() |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
|
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
![]() |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
|
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
![]() |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |