Red de conocimiento informático - Material del sitio web - Cómo usar Python para implementar programación multiproceso

Cómo usar Python para implementar programación multiproceso

1.?Proceso

Crear una clase de proceso: Proceso([grupo?[,?objetivo?[,?nombre?[,?args?[,?kwargs]]] ]]), target representa el objeto que llama y args representa la tupla de parámetros posicionales del objeto que llama. kwargs representa un diccionario de llamadas a objetos. El nombre es un alias. El grupo en realidad no se utiliza.

Métodos: is_alive(), join([timeout]), run(), start(), terminate(). Entre ellos, Process inicia un proceso con start ().

Atributos: authkey, daemon (que se configurará mediante start()), código de salida (el proceso es Ninguno cuando se ejecuta, si es -N, significa que fue terminado por la señal N), nombre, pid . Entre ellos, el demonio finaliza automáticamente después de que finaliza el proceso principal y no puede generar nuevos procesos por sí solo. Debe configurarse antes de iniciar ().

Ejemplo 1.1: Crear una función como un proceso único

import?multiprocesamiento

import?time

def?worker(interval ) :

n?=?5

mientras?n?>?0:

print("¿La?hora?es?{0}". formato (time.ctime()))

time.sleep(interval)

n?-=?1

if?__name__?==?" __main__ ":

p?=?multiprocesamiento.Proceso(destino?=?trabajador,?args?=?(3,))

p.start()

imprimir?"p.pid:",?p.pid

imprimir?"p.name:",?p.name

imprimir?"p.is_alive: " ,?p.is_alive()

Resultado

12345678p.pid:?8736p.name:?Process-1p.is_alive:?TrueThe?time?is?Tue?Apr? ?20:55:12?2015¿La?hora?es?mar??21?abr?20:55:15?2015¿La?hora?es?mar??21?abr?20:55:18?2015¿La?hora?es?martes? ?Abr?21?20:55:21?2015¿La?hora?es?Mar?Apr?21?20:55:24?2015

Ejemplo 1.2: Crear una función como múltiples procesos

¿importar?multiprocesamiento

¿importar?tiempo

def?worker_1(intervalo):

imprimir?"worker_1"

tiempo .sleep(intervalo)

imprimir?"end?worker_1"

def?worker_2(intervalo):

imprimir?"worker_2"

tiempo.sleep(intervalo)

imprimir?"end?worker_2"

def?worker_3(intervalo):

imprimir?" trabajador_3"

tiempo.dormir(intervalo)

imprimir?"end?worker_3"

if?__name__?==?"__main__":

p1?=?multiprocessing.Process(target?=?worker_1,?args?=?(2,))

p2?=?multiprocessing.Process(target?=?worker_2,? args?=? (3,))

p3?=?multiprocessing.Process(target?=?worker_3,?args?=?(4,))

p1.start ()

p2.start()

p3.start()

print("¿El?número?de?CPU?es:"?+? str(multiprocesamiento. cpu_count()))

para?p?in?multiprocessing.active_children():

prin

t("childp.name:"?+?p.name?+?"\tp.id"?+?str(p.pid))

imprimir?"END!!!!!! !!!!!!!!!!!!"

Resultado

1234567891011El?número?de?CPU?es:4childp.name:Proceso-3p.id7992childp.name: Proceso -2p.id4204childp.name:Process-1p.id6380END!!!!!!!!!!!!!!!!!worker_1worker_3worker_2end?worker_1end?worker_2end?worker_3

Ejemplo 1.3: Definir el procesar como clase

importar?multiprocesamiento

importar?tiempo

clase?ClockProcess(multiprocesamiento.Proceso):

def?__init__( self, ?interval):

multiprocesamiento.Proceso.__init__(self)

self.interval?=?interval

def?run(self):

n?=?5

mientras?n?>?0:

print("¿la?hora?es?{0}".format(hora .ctime()))

time.sleep(self.interval)

n?-=?1

if?__name__?==?'__main__ ':

p?=?ClockProcess(3)

p.start()?

Nota: Cuando el proceso p llama a start(), run() se llama automáticamente

Resultados

12345la?hora?es?mar?21?abr?20:31:30?2015la?hora?es?mar??21?abr?20: 31:33 ?2015la?hora?es?martes?abr?21?20:31:36?2015la?hora?es?martes?abr?21?20:31:39?2015la?hora?es?martes?abr? 21?20 :31:42?2015