procesos multitarea hilos ejemplos crear concurrentes con python multithreading logging multiprocessing locks

multitarea - Estado de la mezcla de multiprocesamiento y subprocesamiento en Python



multitarea en python (1)

Estarás a salvo si descifras procesos adicionales mientras aún tengas solo un hilo en tu programa (es decir, bifurcar desde el hilo principal, antes de generar hilos de trabajo).

Su caso de uso parece que ni siquiera necesita un módulo de multiprocesamiento; puede utilizar un subproceso (o incluso llamadas más simples de sistema operativo).

Consulte también ¿Es seguro bifurcar dentro de un hilo?

¿Cuáles son las mejores prácticas o soluciones alternativas para el uso de subprocesos y subprocesos de usuario en la misma aplicación python en Linux con respecto al problema 6721, los bloqueos en la biblioteca estándar de python se deben limpiar en el fork?

¿Por qué necesito ambos? Utilizo procesos secundarios para realizar cálculos pesados ​​que producen resultados de la estructura de datos que son demasiado grandes para regresar a través de una cola, sino que deben almacenarse inmediatamente en el disco. Parecía eficiente tener cada uno de estos procesos secundarios monitoreados por un subproceso separado, de modo que cuando termine, el subproceso podría manejar el IO de leer los datos grandes (por ejemplo, múltiples GB) de nuevo en el proceso donde se necesitaba el resultado para un cálculo adicional en Combinación con los resultados de otros procesos infantiles. Los procesos secundarios se bloquearían de forma intermitente, lo que acabo de encontrar (después de mucho golpe de cabeza) fue "causado" mediante el uso del módulo de registro. Otros han documentado el problema aquí:

https://twiki.cern.ch/twiki/bin/view/Main/PythonLoggingThreadingMultiprocessingIntermixedStudy

lo que apunta a este problema de Python aparentemente no resuelto: los bloqueos en la biblioteca estándar de python deben desinfectarse en el fork; http://bugs.python.org/issue6721

Alarmado por la dificultad que tenía rastreando esto, respondí:

¿Hay alguna razón para no mezclar el módulo de multiproceso y subprocesamiento en Python?

con la sugerencia bastante inútil de ''Cuidado'' y enlaces a los anteriores.

Pero el extenso debate en el número 6721 sugiere que es un "error" utilizar tanto el multiprocesamiento (u os.fork) como los hilos de usuario en la misma aplicación. Con mi comprensión limitada del problema, encuentro demasiados desacuerdos en la discusión para concluir cuáles son las soluciones alternativas o las estrategias para usar multiproceso y subprocesamiento en la misma aplicación. Mi problema inmediato se resolvió al deshabilitar el registro, pero creo un pequeño puñado de otros bloqueos (explícitos) tanto en el proceso principal como en el secundario, y sospecho que me estoy preparando para otros bloqueos intermitentes.

¿Puede dar recomendaciones prácticas para evitar puntos muertos mientras usa bloqueos y / o el módulo de registro mientras usa el subprocesamiento y multiprocesamiento en una aplicación de python (2.7,3.2,3.3)?