Pregunta

Si no, ¿hay alguna manera de garantizar la seguridad de los subprocesos mediante la programación de una determinada manera?

Para aclarar, cuando se habla de "multi-hilo,' me refiero a las discusiones de Python, no hilos OS-nivel.

¿Fue útil?

Solución

Todo depende de la interacción entre su código Cython y Gil de Python, tal como se documenta en detalle aquí . Si usted no hace nada especial, el código generado por el Cython respetará la GIL (al igual que una extensión C-codificado que no utiliza las macros GIL-Releasing); que hace que dicho código "como multi-hilo como código Python" - que no es mucho, pero es más fácil de manejar que completamente libre de enhebrar código (que todavía necesita arquitecto multi-roscado cooperación y sincronización, a ser posible con casos cola, pero posiblemente con bloqueo y c).

El código que ha renunciado a la GIL y sin embargo, no se adquiere de nuevo no debe de ninguna manera interactúan con el tiempo de ejecución de Python y los objetos que utiliza el tiempo de ejecución de Python - esto va para Cython tan bien como para las extensiones codificados-C. La ventaja de esto es, por supuesto, que tal código se puede ejecutar en un núcleo separado (hasta que se necesita para sincronizar o de cualquier manera comunicarse con el Python tiempo de ejecución de nuevo, por supuesto).

Otros consejos

medios de bloqueo intérprete globales de Python que sólo un hilo puede estar activo en el intérprete en un momento dado. Sin embargo, una vez que se pasa el control a una extensión C otro hilo puede estar activo dentro del intérprete. Múltiples hilos pueden ser creados, y nada impide que un hilo de ser interrumpido en el centro de una sección crítica. N

en el código de flujos seguros puede ser implementada dentro del intérprete, así que nada de código que se ejecuta en el intérprete está inherentemente hilo de seguridad. Código en módulos de refrigeración y Pyrex todavía puede modificar las estructuras de datos que son visibles para el código Python. código nativo puede, por supuesto, también tienen problemas con el roscado estructuras de datos nativas.

Puede no garantiza la seguridad de rosca más allá de utilizar el diseño y la sincronización apropiada -. Del GIL en el intérprete de Python no cambiar sustancialmente este

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top