用cython生成线程安全的随机数

时间:2015-01-07 17:20:00

标签: python numpy cython

我正在试图对我所做的事情进行cython化,这涉及并行化循环中的随机数生成。我想使用mtrand但由于它是Python代码,因此无法使用nogil块,并且出于某种原因mtrand的.pyx不会暴露给我们其他人使用

我知道我可以使用rand或任何其他C RNG(例如gsl);有更标准的方法吗?

1 个答案:

答案 0 :(得分:2)

您已正确总结了这种情况。在撰写本文时,您可以执行以下三种操作之一:

  • 修改NumPy以允许在mtrand.pxd中共享声明

  • 通过默认界面使用NumPy的随机生成器(也许您可以在nogil块之外预先存储所有随机数?)

  • 使用用C编写的随机数生成器(如果您使用Cython生成C ++代码,可能使用C ++)。

老实说,我可能会做最后一次。如果你可以使用C ++ 11,那么你可以使用C ++标准库中包含几个好的随机数生成器。