用C语言解决python多线程中的GIL问题
在使用python多线程的时候为了解决GIL问题,有些代码得用C语言写,那么就得生成动态链接库。
当创建动态链接库时,独立位置信息(position independent)代码也需要生成。这可以帮助动态链接库或者跟多的加载地址信息来替代其他相对的地址信息。所以-fPIC这个选项作用很大,能快速准确定位错误地址。
1 #Cfile.c 为自定义的C语言文件。 2 gcc -c -Wall -Werror -fPIC Cfile.c 3 #libCfile.so为自定义生成动态链接库的文件名,Cfile.o为前一个命令生成为文件。 4 gcc -shared -o libCfile.so Cfile.o
一个例子。
1 from ctypes import * 2 from threading import Thread 3 4 #加载动态库 5 lib =cdll.LoadLibrary("./libloop.so") 6 7 #创建一个子线程,让其执行C语言编写的函数 8 t= Thread(target=lib.main) 9 10 #启动线程 11 t.start()