这是一个与我所想到的特定实现相关的一般性问题,关于在共享内存环境中使用为GIL内部使用而设计的python例程是否安全。具体来说,我想做的是对scipy.optimize.curve_fit
函数中的一个大数组使用cython
。
数据可以被表示为2D numpy
数组(例如,浮点数),轴要拟合,另一个要被并行化的序列化轴。然后我只想发布GIL并开始用cython.parallel.prange
循环数据(这样我就可以让所有的核心同时进行装配)。
我可以预见的主要问题是curve_fit
不“就地”操作;它返回参数的拟合值(以及可选的协方差矩阵),因此必须在某个点分配内存。(当然,我也不知道例程执行的任何中间内存分配)我担心的是,在GIL之外,多个线程同时工作时,这将如何操作。
我知道答案可能是“应该很好,去试试吧”,但我希望能知道该注意些什么。我还意识到这个问题与其他关于并行化scipy
/numpy
例程的问题类似,但我认为这个问题的措辞不同,因为它属于python的C环境的cython
范围。
谢谢你的帮助/建议。
最佳答案
不安全。如果CPython可以在没有GIL的情况下安全地运行这种代码,那么我们首先就不会有GIL。
关于python - 在GIL之外使用scipy例程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42148101/