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