base de pitón-pitón 10

En primer lugar, el multiprocesamiento multi-proceso

multiprocesamiento es un paquete que utiliza una API similar al generador de módulo de soporte hilo. paquete que ofrece tanto concurrencia local y remoto Multi-procesamiento, evitar efectivamente el bloqueo global intérprete utilizando el proceso hijo en lugar de hilo. Por lo tanto, el módulo de multiprocesamiento permite al programador para tomar ventaja de múltiples procesadores en una máquina determinada. Se ejecuta en Unix y Windows.

importación multiprocesamiento
 importación tiempo 

def ejecutar (nombre):
     print ( " Hola% s " % nombre) 
    time.sleep ( 2 ) 

si  __name__ == " __main__ " :
     para i en rango (5 ): 
        p = multiprocessing.Process (target = Ejecutar, args = ( " jehu " ,)) 
        p.start ()

Cada proceso tiene un proceso padre, el aspecto siguiente ejemplo en el progreso de cada identificador de proceso y proceso padre Identificación:

de multiprocesamiento Importación Proceso de
 Importación OS 


DEF información (título):
     Imprimir (título)
     Imprimir ( ' Nombre del módulo: ' , __name__ )
     Imprimir ( ' proceso padre: ' , os.getppid ())    # imprimir el proceso padre lo anterior Identificación del mencionado 
    impresión ( " Proceso de lo anterior Identificación del mencionado : 'os.getpid ())         # imprimir el proceso actual de lo anterior mencionado ID 
    de impresión ( " \ n el \ n- el " ) 


DEF f (nombre): 
    info ( '\ 033 [31; 1mfunction f \ 033 [0m ' )
     de impresión ( ' hola 'nombre) si __name__ == ' __main__ ' : 
    info ( ' \ 033 [32; línea de proceso 1mmain \ 033 [0m ' ) 
    p = Proceso ( target = f, args = ( ' Bob ' ,)) 
    p.start () 
    p.join ()


 

Los resultados:

principal línea de proceso 
Nombre del módulo: __main__ 
proceso padre: 7944 
proceso id: 6744 


función f 
nombre del módulo: __mp_main__ 
proceso padre: 6744 
: Proceso de Identificación 10136 


Bob hola

El proceso principal es el identificador de proceso de su proceso hijo del proceso padre Identificación

 

la comunicación entre procesos  

Entre los diferentes procesos de la memoria no es compartida, con el fin de intercambiar datos entre dos procesos, puede utilizar los métodos siguientes:

colas

Utilizar casi como enhebrar en la cola

de multiprocesamiento Importación Proceso, Queue 

DEF F (Q): 
    q.put ([ 42 es, Ninguna, ' Hola ' ])      # 3. proceso principal de cola para la transmisión de datos del niño 

IF  la __name__ == ' __main__ ' : 
    Q = Queue ()      # 1 para generar un proceso principal Queue instancia de proceso, la atención es diferente del hilo de cola 
    P = proceso (target = F, args = (Q,))     # Queue 2. el proceso como el parámetro principal para el subproceso 
    p.start ()
     Imprimir (q.get ())   # Prints "[42 es, Ninguna, 'Hola']" #. 4. Quitar los principales datos de proceso desde el paso niño en la cola de lograr datos entre diferentes procesos transferencia 
    p.join ()

Sabemos que los datos no puede ser compartida entre los diferentes procesos, espacio de memoria diferente, por eso puede Cola proceso hijo proceso primario para pasarlo?

De hecho, la lógica subyacente es que, cuando la cola de proceso maestro como un parámetro pasado al proceso hijo es en realidad clona una cola para el proceso hijo y el proceso hijo es el proceso principal tiene una cola, a su cola proceso hijo cuando los datos transmitidos, hay datos en la cola de un tercero mediante el depósito Pickl serialización identificador de proceso viene, a continuación, deserializar la cola de escritura en el proceso principal. Hay un tercero, en lugar de entre el proceso principal y sub-proceso de transferencia de datos directamente.

 

 

 

 

 

de multiprocesamiento Importación Proceso , Queue 

DEF F (Q):
q.put ([ 42 es , Ninguna, 'Hola' ]) .. # 3 sub-proceso para el proceso principal de la cola en la transmisión de datos
SI la __name__ == '__main__' : Q = Queue () # 1 genera en un proceso en el proceso principal Queue ejemplo, la atención es diferente del hilo de cola P = proceso ( objetivo = F , args = (Q , )) # 2. el proceso principal de la cola como un parámetro para el subproceso p.start () Imprimir (q.get ())




# Prints "[42, ninguno, 'hola']" # 4. proceso principal de los de cola recuperación de datos pasan en el proceso de niño, para lograr una transferencia de datos entre los diferentes procesos
p.join ()

Supongo que te gusta

Origin www.cnblogs.com/jehuzzh/p/12501362.html
Recomendado
Clasificación