多线程Python的C扩展能否提升性能?

min*_*nel 6 python

我听说过Python的GIL问题,它说在多核机器上一次只能有一个Python线程执行Python字节码.所以多线程Python程序不是一个好主意.

我想知道我是否可以编写一个C扩展来创建一个可能启动程序性能的pthread.我的意思是我在我的C扩展中创建一个线程,并希望它与Python主线程并行运行.

我的假设是Python主线程将使用IO做更多事情; 并且我的C扩展中的pthread将花费大部分时间进行计算.Python主线程使用队列(如生产者消费者模型)与C扩展中的线程进行通信.

多线程与Python和C扩展之间有什么区别吗?

nne*_*neo 2

回答你原来的问题:

是的,C 扩展可以不受 GIL 的影响,前提是它们在没有持有 GIL 的情况下不调用任何 Python API 函数。因此,如果您需要与 Python 应用程序进行通信,则需要获取 GIL 才能执行此操作。如果您不想让 C API 太麻烦,您可以使用ctypes调用 C 库(可以pthreads照常使用),或使用 Cython 以类似 Python 的语法编写 C 扩展。