似乎由于访问 NumPy 数组数据不需要调用 Python 解释器,因此 C 扩展可以在释放 GIL 后操作这些数组。例如,在这个线程中。
内置的 Python 类型 bytearray 支持Buffer Protocol,其中一个成员是
无效*buf
指向缓冲区字段描述的逻辑结构开始的指针。[...] 对于连续数组,值指向内存块的开头。
我的问题是,在释放 GIL (Py_BEGIN_ALLOW_THREADS) 后,C 扩展是否可以操作此buf,因为访问它不再需要调用 Python C API?或者 Python 垃圾收集器的性质是否禁止这样做,因为 bytearray 及其 buf 可能在执行期间被移动?