在这里回答我自己的问题,但是在探究 NumPy 1.3.0 的源代码之后,我相信答案是:是的,PyArray_DATA
是线程安全的。
PyArray_DATA
在 ndarrayobject.h 中定义:
#define PyArray_DATA(obj) ((void *)(((PyArrayObject *)(obj))->data))
PyArrayObject 结构类型定义在同一个文件中;感兴趣的领域是:
char *data;
所以现在的问题是data
从多个线程访问是否安全。
从头开始创建一个新的 NumPy 数组(即,不是从现有数据结构派生的)将一个NULL
数据指针传递给PyArray_NewFromDescr
在 arrayobject.c 中定义的 。
这会导致PyArray_NewFromDescr
调用PyDataMem_NEW
以便为 PyArrayObject 的data
字段分配内存。这只是 malloc 的一个宏:
#define PyDataMem_NEW(size) ((char *)malloc(size))
总之,PyArray_DATA
它是线程安全的,只要 NumPy 数组是单独创建的,从不同线程写入它们是安全的。