2009-12-30 17 views

Respuesta

12

sincronización del módulo threading primitiva son más ligeros y más rápido que el multiprocesamiento, debido a la falta de hacer frente a los semáforos compartidas, etc. Si está utilizando hilos; usa los bloqueos de enhebrado Los procesos deben usar bloqueos de multiprocesamiento.

+2

Sin mencionar que 'multiprocesamiento' no es tan portable como' threading' es;) –

+1

¿Por qué tienes que ser así :) – jnoller

2

Yo esperaría que las primitivas de sincronización multi-threading para ser bastante rápido ya que pueden utilizar fácilmente área de memoria compartida. Pero supongo que tendrás que realizar una prueba de velocidad para estar seguro de ello. Además, puede tener efectos secundarios que son bastante indeseados (y no especificados en el documento).

Por ejemplo, un bloqueo de proceso-sabia muy bien podría bloquear todos los hilos del proceso. Y si no lo hace, liberar un bloqueo podría no despertar los hilos del proceso.

En resumen, si desea que su código funcione con seguridad, debe utilizar las primitivas de sincronización de subprocesos si está utilizando subprocesos y las primitivas de sincronización de proceso si está utilizando procesos. De lo contrario, podría funcionar solo en su plataforma, o incluso solo con su versión específica de Python.

0

multiprocessing y threading tienen objetivos ligeramente diferentes, aunque ambos están relacionados con la concurrencia. threading coordina subprocesos dentro de un proceso, mientras que multiprocessing proporciona una interfaz tipo subproceso para coordinar procesos múltiples.

Si su aplicación no genera nuevos procesos que requieren sincronización de datos, multiprocessing es un poco más pesado, y el paquete threading debería ser más adecuado.

+0

Entiendo la diferencia entre el subproceso y el multiprocesamiento. Tenía curiosidad por qué uno querría usar las primitivas de sincronización de threading sobre multiprocesamiento. –

Cuestiones relacionadas