Obtenga Python multiproceso en unos minutos

Que es multiproceso

No diré ningún término técnico insondable aquí. En una palabra, beba café mientras se baña. Es decir, deje que múltiples áreas de código o funciones se ejecuten al mismo tiempo en el código para lograr el propósito de mejorar la eficiencia.

por ejemplo

Por ejemplo, tenemos un juego de este tipo, Xiao Ming y Xiao Hong están haciendo pruebas de funcionamiento, y ahora todos tienen un temporizador para cronometrar. Esta es su prueba uno por uno. Al igual que el código a continuación.

import threading
import time
time0=time.time()
def print_ming():
    time.sleep(5)
    print('我是小明我跑完了')

def print_hong():
    time.sleep(3)
    print('我是小红我跑完了')


print_ming()
print_hong()

time1=time.time()
print(time1-time0)

Podemos ver los resultados
Inserte la descripción de la imagen aquí

Obviamente pasamos unos 8 segundos para terminar la prueba. Sin embargo, todos tienen un temporizador de modo que juntarlos para probarlos al mismo tiempo puede mejorar enormemente la eficiencia.

Prueba simultánea

Escribimos el código e hicimos los siguientes cambios:
Importar
hilo 1 Crear hilo ming=threading.Thread(target=print_ming)
2 Nacer hilo ming.setDaemon(True)
3 Ejecutar hilo El ming.star()
código modificado es el siguiente:



import threading
import time
time0=time.time()
def print_ming():
    time.sleep(5)
    print('我是小明')

def print_hong():
    time.sleep(3)
    print('我是小红')

ming=threading.Thread(target=print_ming)

hong=threading.Thread(target=print_hong)

ming.start()
hong.start()


print('执行完了')
time1=time.time()
print(time1-time0)

El resultado es el siguiente:
Inserte la descripción de la imagen aquí
¿Cómo puede el shock ser tan rápido? Obviamente, podemos encontrar que en este programa o prueba, Xiao Ming y Xiao Hong no se ejecutaron en absoluto. ¿Cómo pudo suceder esto? Obviamente, nuestro programa principal se ejecuta más rápido que las dos funciones (o subfunciones), por lo que el programa principal terminará después de ejecutarse.

¿Quién corre rápido?

Aquí obviamente necesitamos que el programa principal espere nuestras dos funciones. Podemos suponer que hay un entrenador que corre rápido durante la prueba de carrera. Siempre que una de las tres personas llegue al punto final, la prueba termina. Así que echemos un vistazo a dejar que los corredores rápidos esperen primero a los lentos.
Así que agregamos dicho código sobre la base original;
1 Crear hilo ming = hilo hilo (target = print_ming)
2 Crear hilo ming.setDaemon (Verdadero)
3 Ejecutar hilo ming.star ()
4 Esperar hilo ming.join ()


import threading
import time
time0=time.time()
def print_ming():
    time.sleep(5)
    print('我是小明')

def print_hong():
    time.sleep(3)
    print('我是小红')

ming=threading.Thread(target=print_ming)

hong=threading.Thread(target=print_hong)

ming.start()
hong.start()
ming.join()

print('执行完了')
time1=time.time()
print(time1-time0)

El resultado es el siguiente.
Inserte la descripción de la imagen aquí
Obviamente, sabemos que Xiao Ming tiene miedo de ser lento, por eso les pedimos a todos que esperen a Xiao Ming, pero si cambiamos ming.join ()
a hong.join (),
Inserte la descripción de la imagen aquí
obviamente Xiao Ming no lo ha ejecutado, por lo que debemos usar lento como estándar, pero Obviamente, a veces no sabemos quién es más lento. Así que solo suma los dos.
Y para la conveniencia de la administración, podemos agregar el hilo al bucle. El código final es el siguiente;


import threading
import time
time0=time.time()
def print_ming():
    time.sleep(5)
    print('我是小明')

def print_hong():
    time.sleep(3)
    print('我是小红')
thread=[]
ming=threading.Thread(target=print_ming)
thread.append(ming)
hong=threading.Thread(target=print_hong)
thread.append(hong)
for t in thread:
    t.setDaemon(True)
    t.start()

ming.join()
hong.join()

print('执行完了')
time1=time.time()
print(time1-time0)

Inserte la descripción de la imagen aquí
Tenga en cuenta aquí que no agregué el método join () al ciclo, de lo contrario verá este resultado;
Inserte la descripción de la imagen aquí
obviamente, esto no tiene ningún efecto, ¿por qué es esto? Puede entender de esta manera, el ciclo está en el programa principal y hay dos subrutinas en el ciclo. El programa, incluso si los dos programas se ejecutan juntos, se ejecutará dos veces cada vez, es decir, la primera vez que Xiaohong ejecuta el hilo y finaliza durante 3 segundos, pero en este momento el programa principal no se ejecuta y entra en el siguiente ciclo. En este momento, la ejecución de Xiaoming cuesta 5 Un total de 8 segundos.
Entonces debemos usar join () fuera del ciclo

Resultados finales


import threading
import time
time0=time.time()
def print_ming():
    time.sleep(3)
    print('我是小明')

def print_hong():
    time.sleep(5)
    print('我是小红')
thread=[]
ming=threading.Thread(target=print_ming)
thread.append(ming)
hong=threading.Thread(target=print_hong)
thread.append(hong)
for t in thread:
    t.setDaemon(True)
    t.start()

ming.join()
hong.join()

print('执行完了')
time1=time.time()
print(time1-time0)
#ming=threading.Thread(target=print_ming,args=(填入函数值,没有值需要被填则不设置args参数))

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/FUTEROX/article/details/105881962
Recomendado
Clasificación