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" p>
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 () p>
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