Generación de números aleatorios seguros con cython

Estoy tratando de citonizar algo que hice, que involucra la generación de números aleatorios dentro de un bucle paralelizado. Quería usar mtrand pero como es el código Python, no puede funcionar desde un bloque nogil y, por alguna razón, el mtrand de mtrand no está expuesto para el rest de nosotros.

Sé que puedo usar rand o cualquier otro RNG C (por ejemplo, gsl ); ¿Hay una manera más estándar?

Has resumido la situación correctamente. A partir de este escrito, puedes hacer una de tres cosas:

  • Modifique NumPy para permitir compartir las declaraciones en mtrand.pxd

  • Utilice los generadores aleatorios de NumPy a través de su interfaz predeterminada (¿quizás podría almacenar todos los números aleatorios por adelantado fuera del bloque nogil ?)

  • Use un generador de números aleatorios escrito en C (o posiblemente C ++ si está haciendo que Cython genere un código C ++).

Sinceramente, probablemente haría la última. Si puede usar C ++ 11, hay varios generadores de números aleatorios buenos que ahora están incluidos en la biblioteca estándar de C ++ que podría usar.