★ 背景说明
1. python是一门胶水语言,可以通过加载动态库的方式在一个项目中运行不同语言的程序
2. 通过动态库加载其他语言的方式可以解决多线程GIL使用C解释器无法并发运行的问题
★ 在Linux 中运行C代码:
-
编辑C语言代码
// hello.c // c代码作为启动文件必须加include<stdio.h>,作为动态库可以不加 # include<stdio.h> void dead_loop(){ while(1) { printf("hello world\n"); } } // c语言必须以main函数作为启动入口 void main(){ printf("this is main function!\n"); }
-
编译C语言代码(会生成
xx.out
二进制可执行文件; 不需要编译器)gcc xxx.c -o yyy.out // -o 指定生成二进制文件的名称 gcc hello.c -o hello.out
-
运行编译后的文件
./hello.out
★ 使用Python加载C语言动态库
-
把C语言文件编译成一个动态库(Linux平台下)
gcc xx.c -fPIC -shared -o lib_hello.so
-
python调用C语言动态库代码实现
# dynamic_load_c.py import ctypes from threading import Thread # 加载动态库 hello_lib = ctypes.cdll.LoadLibrary("./lib_hello.so") # 多线程调用C语言库 Thread(target=hello_lib.dead_loop).start() # 也可以直接 hello_lib.dead_loop() 方式调用