从python程序执行c程序
我是编程新手,想知道如何让python程序执行并与c程序通信。我正在用python做一个数学计算,我想知道我是否可以用C编写主要的计算,这样计算速度会更快。我一直在阅读“从Python调用C函数”,“直接在Python代码中包含C或C++代码”,以及“使用Python中的C库”。这是同一件事吗?我想要一个python程序来执行一个c程序并接收结果 从python中“调用C库函数”是什么意思?它是允许python脚本使用c库还是允许脚本在c编译器中执行代码? 谢谢你想要的。它允许您直接从Python运行C函数,而无需任何疯狂的扩展。当然,您应该确保没有过早地进行优化。Python的数学函数非常快从python程序执行c程序,python,c,Python,C,我是编程新手,想知道如何让python程序执行并与c程序通信。我正在用python做一个数学计算,我想知道我是否可以用C编写主要的计算,这样计算速度会更快。我一直在阅读“从Python调用C函数”,“直接在Python代码中包含C或C++代码”,以及“使用Python中的C库”。这是同一件事吗?我想要一个python程序来执行一个c程序并接收结果 从python中“调用C库函数”是什么意思?它是允许python脚本使用c库还是允许脚本在c编译器中执行代码? 谢谢你想要的。它允许您直接从Pytho
ctypes模块允许您直接从Python代码调用C库函数。这意味着您可以将编译后的库放到Python可以访问的地方,然后运行这些编译后的函数。这与从Python调用C程序不同,正如Conrad所指出的,C程序可以通过子进程来完成。当然,子流程不需要用C编写程序。它可以运行任何可执行文件。最简单的方法之一是使用。您可以编写非常接近Python的代码,但它可以编译成C语言。这使得一些代码(尤其是数值计算)更快。您还可以使用Cython轻松地从Python调用C库函数,尽管ctypes也足够了
但是,如果您确实想要执行一个特定的C程序,您可以使用。注意,这比直接调用C库或Cython函数要慢得多。在处理“数组操作”(有时称为向量操作,但我发现该术语与SIMD术语混淆)时,numpy的速度也相当快。如果您决定使用cython路线,您可能需要numpy,因此如果算法不太复杂,您可能首先想看看numpy本身是否足够好 注意这里有两条不同的路线。您可以使用
子流程
,它基本上会向您编写的其他程序发出系统调用。这很慢,因为您需要启动一个新进程,将数据发送到该进程中,然后从该进程中读回数据。换句话说,每次调用都会多次复制数据。第二种方法是从python调用C函数。由于Cpython(参考和最常见的python实现)是用C编写的,因此可以创建C扩展。它们基本上是遵循特定API的编译库。然后Cpython可以加载这些库并使用其中的函数,传递指向数据的指针。通过这种方式,数据实际上并没有被复制——在python中使用的内存块与在C中使用的内存块相同。这里的缺点是C API有点复杂。这就是第三方扩展和现有库(numpy、cython、ctypes等)的用武之地。它们都有不同的方法将计算推送到C函数中,而不必担心C API。Numpy删除循环,以便可以快速地对数组进行加法、减法、乘法(以及其他许多操作)Cython
将python代码翻译成C,然后您可以编译和导入—通常,为了提高速度,您需要提供额外的提示,使Cython能够优化生成的代码,ctypes
有点脆弱,因为您必须重新指定C函数原型,但除此之外,只要你能将你的库编译成一个共享对象,这就很容易了。。。这个名单还可以继续下去
还要注意的是,如果您不使用numpy,您可能希望签出pypy。它声称运行python代码的速度比Cpython快 想到的选项: