1 直接编译成一个可执行文件,然后 python 里执行命令 ./main -xx xxxx,传几个简单的参数 2 编译成动态库,然后 python 去调用这个动态库,再去执行对应的函数
这两种方法有很大区别吗?第 1 种很少见的原因是因为安全性问题吗?还是还有其他的问题?
1
weyou 2020-09-09 23:18:26 +08:00 via Android
第一种也不少见啊, 得看使用场景了,其实就是把 Python 当作 shell 用呗。这种方式受限于命令行参数,复杂一点的结构化参数就比较难办,需要参数来回转换,而且需要起另外的进程,此外获取此进程的返回值也没有第二种方法直接,也需要自行转换。如果是高频度的函数调用,这种方式显然比第二种效率低下。
|
2
billlee 2020-09-09 23:23:04 +08:00
fork-exec 的开销还是比 function call 大得多的
|
3
ipwx 2020-09-09 23:41:23 +08:00
恰恰相反,如果考虑安全性或者环境等乱七八糟的事情,第一种是很好的选择。
选择第二种是为了效率。启动一个新进程开销特别大。 |
4
hakono 2020-09-09 23:44:02 +08:00 via Android
第二种,开发调试起来是噩梦
|
5
ysc3839 2020-09-10 00:45:06 +08:00 via Android
区别算大吧,前者需要启动新进程,后者是在当前进程中执行的。
前者很少见可能是因为不便于传递数据。 |
6
SingeeKing 2020-09-10 00:49:29 +08:00 via iPhone
第一种一方面涉及创建进程,另一方面交互很受限
|
7
Tony042 2020-09-10 01:59:17 +08:00
@hakono 第二种用 C 写好,把 C 的函数都测试好,直接用 pybind11 包一下不就可以了,我感觉 C 这边的 unit test 做好,调试应该不费劲
|
8
swulling 2020-09-10 07:21:13 +08:00 via iPhone
第一种开销比较大,看频率了
频率不高可以用第一种 |