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

multiproceso de Python

Basado en documentos oficiales:

/3/library/multiprocessing.html

Japan Tesco, acabo de ver un blog, la redacción no es del todo correcta. Es más seguro basarlo en el oficial

Sólo me gusta copiar el oficial, jaja

Generalmente usamos Process para crear una instancia de un proceso y llamamos a su método start() para empezarlo.

Este método es el mismo que Thread.

En la imagen de arriba, escribí p.join(), por lo que el proceso principal espera a que el proceso secundario termine de ejecutarse antes de ejecutar print("Run End")

De lo contrario, es al revés (Esto no es necesariamente cierto. Depende de su declaración. En realidad, el orden es aleatorio). Por ejemplo:

Agregue un sueño al proceso principal

Entonces, sin agregar join(), de hecho, el proceso hijo y el proceso principal están haciendo lo suyo y nadie está esperando a nadie. Después de ejecutar todo, se completa la operación del archivo

Arriba usamos os.getpid() y os.getppid() para obtener el proceso actual y el ID del proceso principal

Lo siguiente es Hablemos sobre el uso de estas dos funciones:

os.getpid()

Devuelve la identificación del proceso actual

os.getppid( )

Devuelve la identificación del proceso padre. Después de que sale el proceso principal, Unix regresa a uno de los procesos de inicialización (1)

Windows devuelve el mismo ID (puede ser utilizado por otros procesos)

Esto también explica por qué ejecuté El programa anterior varias veces y el parentid impreso por primera vez fue 14212.

El id del proceso padre del proceso hijo es el id del proceso que lo llamó: 1940

Notas del vídeo:

Multiproceso: utilice el general método:

Referencia: Comunicación del proceso (tubería y cola)

pool.map (la función puede tener retorno o *compartir memoria o cola) El resultado es directamente una lista

poll.apply_async() (Igual que map, pero es un proceso, el resultado devuelto se obtiene con xx.get())

Error:

Referencia: /3/ biblioteca/itertools .html#itertool-functions

Hay un problema. Es mejor no usar todas las CPU para múltiples procesos, porque esto puede afectar otras tareas, así que agregue el parámetro de proceso al grupo de procesos. para especificar el número de CPU:

Lo anterior es reservar una CPU para hacer otras cosas

Más tarde, al usar Queue directamente, encontré este problema:

Solución:

Manager() .Queue() reemplaza a Queue()

Debido a que queue.get() está bloqueando, se puede juzgar de antemano si está vacío para evitar el bloqueo. el proceso. Por ejemplo, de la siguiente manera:

Utilice queue.empty() y establezca vacío en Verdadero