Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Qué significa multiproceso de Python?

¿Qué significa multiproceso de Python?

En pocas palabras, como el único lenguaje interpretado que puede admitir subprocesos múltiples (el subproceso múltiple de Perl está deshabilitado, PHP no tiene subprocesos múltiples), el subproceso múltiple de Python está comprometido en cualquier momento. Solo hay un intérprete de Python que interpreta el código de bytes de Python.

ACTUALIZACIÓN: Como se señaló en los comentarios, Ruby también tiene soporte para subprocesos y al menos Ruby MRI tiene GIL.

Si su código requiere un uso intensivo de la CPU, es probable que se ejecuten varios subprocesos de código de forma lineal. Entonces, en este caso, el subproceso múltiple es inútil y la eficiencia puede no ser tan buena como la del subproceso único debido al cambio de contexto.

Pero: si su código requiere un uso intensivo de E/S, el subproceso múltiple puede afectar significativamente mejorar la eficiencia. Por ejemplo, al crear un rastreador (no entiendo por qué Python siempre está asociado con rastreadores... pero solo puedo pensar en este ejemplo...), la mayor parte del tiempo el rastreador está esperando que el socket devuelva datos. . En este momento, hay un GIL de lanzamiento en el código C. El resultado final es que otros subprocesos pueden continuar ejecutándose mientras un subproceso espera IO.

Por otro lado: no deberías usar Python para escribir código que requiera un uso intensivo de la CPU... La eficiencia está ahí...

Si realmente necesitas usar concurrente en la CPU- Código intensivo, simplemente use la biblioteca de multiprocesamiento. Esta biblioteca implementa una interfaz API similar a múltiples subprocesos basada en múltiples procesos y utiliza pickle para implementar parcialmente el intercambio de variables.

Una cosa más, si no sabes si tu código requiere un uso intensivo de CPU o IO, aquí tienes un método:

El módulo de multiprocesamiento tiene un submódulo ficticio. Implementa API de multiprocesamiento basada en multiproceso.

Supongamos que está utilizando un grupo de multiprocesamiento, que utiliza múltiples procesos para lograr simultaneidad

desde el grupo de importación de multiprocesamiento

Si cambia este código al siguiente, se convierte en subprocesos múltiples para implementar la concurrencia

desde multiprocessing.dummy import Pool

Ejecute ambos métodos y use el que sea más rápido.

ACTUALIZACIÓN:

Acabo de descubrir concurrent.futures, que incluye ThreadPoolExecutor y ProcessPoolExecutor, y puede ser más simple que el multiprocesamiento