最近在写一个 python 多线程读取数据库的程序,只是不知道为什么 python 的多线程和单线程没多大区别,效率也没有提高,而且执行方向也是和单线程一样,请问这是什么问题呢,我用了 threading,自带的 thread 还有 map, 都没用。
Guangyu说的很对,你需要使用多进程才能提高cpu利用率。
C实现的Python中,GIL,也就是全局解释器锁,任何python程序解释执行时都需要它。如果你只开了一个进程,那么不论你有多少个线程,多少个core的cpu,你都只是在time multiplexing,最多使得一个core的利用率接近100%。
除了使用multiprocessing,你也可以使用ctypes这个包,从而在python中调用动态链接库。相当于在C里实现一些功能,然后用python来调用。
Python3.2引入了new GIL,跟原始的GIL的机制有一些显著区别,可以了解一下:
New GIL