[Reimpreso] Python multihilo es tan simple

https://www.cnblogs.com/fnng/p/3670789.html

¿Qué es el cerebro de Google multiproceso y multiproceso?

  Me llevó mucho tiempo comprender el subprocesamiento múltiple de Python, y la mayoría de los artículos que busqué no son fáciles de entender. Entonces, aquí trato de usar ejemplos simples para darle una comprensión preliminar de multihilo.

Hilo único


  En la era de MS-DOS, hace muchos años, el sistema operativo manejaba los problemas en una sola tarea: quería hacer dos cosas, escuchar música y ver películas. (¡De acuerdo! No nos cuesta si existen aplicaciones para escuchar música y ver películas en la era de DOS. _ )

from time import ctime,sleep

def music():
    for i in range(2):
        print "I was listening to music. %s" %ctime()
        sleep(1)

def move():
    for i in range(2):
        print "I was at the movies! %s" %ctime()
        sleep(5)

if __name__ == '__main__':
    music()
    move()
    print "all over %s" %ctime()

  Primero escuchamos una pieza de música y usamos el bucle for para controlar la reproducción de la música dos veces. Cada reproducción de música tarda 1 segundo, y sleep () controla la duración de la reproducción de música. Luego vimos otra película, cada película tomó 5 segundos, porque era muy hermosa, así que también la vi dos veces durante el ciclo for. Después de todo el evento de ocio y entretenimiento, pasé

print "all over %s" %ctime()

Después de verificar la hora actual, es casi la hora de irse a dormir.

Resultado de la operación:

>>=========================== RESTART ================================
>>> 
I was listening to music. Thu Apr 17 10:47:08 2014
I was listening to music. Thu Apr 17 10:47:09 2014
I was at the movies! Thu Apr 17 10:47:10 2014
I was at the movies! Thu Apr 17 10:47:15 2014
all over Thu Apr 17 10:47:20 2014

  De hecho, la música () y move () deben considerarse como reproductores de música y video. En cuanto a qué canciones y videos reproducir, debemos decidir cuándo los usamos. Por lo tanto, hemos modificado el código anterior:

#coding=utf-8
import threading
from time import ctime,sleep

def music(func):
    for i in range(2):
        print "I was listening to %s. %s" %(func,ctime())
        sleep(1)

def move(func):
    for i in range(2):
        print "I was at the %s! %s" %(func,ctime())
        sleep(5)



if __name__ == '__main__':
    music(u'爱情买卖')
    move(u'阿凡达')

    print "all over %s" %ctime()

Parámetros pasados ​​a music () y move (). Experimente las canciones clásicas chinas y la exitosa cultura europea y estadounidense.

Resultado de la operación:

>>> ======================== RESTART ================================
>>> 
I was listening to 爱情买卖. Thu Apr 17 11:48:59 2014
I was listening to 爱情买卖. Thu Apr 17 11:49:00 2014
I was at the 阿凡达! Thu Apr 17 11:49:01 2014
I was at the 阿凡达! Thu Apr 17 11:49:06 2014
all over Thu Apr 17 11:49:11 2014

Multithreading


  La tecnología se está desarrollando, los tiempos avanzan y nuestra CPU se está volviendo cada vez más rápida. La CPU se queja de que P está ocupando una cierta cantidad de tiempo. De hecho, puedo hacer varios trabajos al mismo tiempo; entonces, el sistema operativo entra La era de la multitarea. Estamos escuchando música y comer marihuana no es un sueño.

  Python proporciona dos módulos para implementar múltiples subprocesos y subprocesos. El subproceso tiene algunas deficiencias, que se compensan en el subprocesamiento. Para no desperdiciarle tiempo y tiempo, podemos aprender a enhebrar directamente.

  Continúe modificando el ejemplo anterior e introduzca hilos para reproducir música y video al mismo tiempo:

#coding=utf-8
import threading
from time import ctime,sleep


def music(func):
    for i in range(2):
        print "I was listening to %s. %s" %(func,ctime())
        sleep(1)

def move(func):
    for i in range(2):
        print "I was at the %s! %s" %(func,ctime())
        sleep(5)

threads = []
t1 = threading.Thread(target=music,args=(u'爱情买卖',))
threads.append(t1)
t2 = threading.Thread(target=move,args=(u'阿凡达',))
threads.append(t2)

if __name__ == '__main__':
    for t in threads:
        t.setDaemon(True)
        t.start()

    print "all over %s" %ctime()

Descripción detallada:

threads = []
t1 = threading.Thread(target=music,args=(u'爱情买卖',))
threads.append(t1)

  Cree la matriz de subprocesos, cree el subproceso t1, use el método threading.Thread (), llame al método music target = music en este método, al método args para pasar parámetros a la música. Cargue el hilo creado t1 en la matriz de hilos.
Luego cree el hilo t2 de la misma manera e instale t2 en la matriz de hilos.
  

for t in threads:
  t.setDaemon(True)
  t.start()

  Finalmente atraviese la matriz a través del bucle for. (La matriz se carga con dos hilos, t1 y t2). setDaemon (True) declara el subproceso como un subproceso de daemon, que debe establecerse antes de que se llame al método start (). Si no se establece como un subproceso de daemon, el programa se suspenderá indefinidamente. Después de que se inicia el subproceso secundario, el subproceso principal también continúa ejecutándose. Cuando el subproceso principal ejecuta la última instrucción print "all over% s"% ctime (), no espera el subproceso secundario y sale directamente. Al mismo tiempo, el subproceso secundario también finaliza.

>>> ========================= RESTART ================================
>>> 
I was listening to 爱情买卖. Thu Apr 17 12:51:45 2014 I was at the 阿凡达! Thu Apr 17 12:51:45 2014  all over Thu Apr 17 12:51:45 2014

  A juzgar por los resultados de la ejecución, el subproceso secundario (muisc, move) y el subproceso principal (print "all over% s"% ctime ()) se inician al mismo tiempo, pero debido a que el subproceso principal finaliza la ejecución, el subproceso secundario también finaliza.

Continúe ajustando el programa:

if __name__ == '__main__':
    for t in threads:
        t.setDaemon(True)
        t.start()
    
    t.join()

    print "all over %s" %ctime()

  Solo agregamos un método join () al programa anterior para esperar a que termine el hilo. La función de join () es que el subproceso principal de este subproceso secundario se bloqueará hasta que el subproceso secundario termine de ejecutarse.

  Nota: La posición del método join () está fuera del ciclo for, lo que significa que debe esperar a que finalicen ambos procesos en el ciclo for antes de ejecutar el proceso principal.

Resultado de la operación:

>>> ========================= RESTART ================================
>>> 
I was listening to 爱情买卖. Thu Apr 17 13:04:11 2014  I was at the 阿凡达! Thu Apr 17 13:04:11 2014

I was listening to 爱情买卖. Thu Apr 17 13:04:12 2014
I was at the 阿凡达! Thu Apr 17 13:04:16 2014
all over Thu Apr 17 13:04:21 2014

Supongo que te gusta

Origin www.cnblogs.com/selfcs/p/12696383.html
Recomendado
Clasificación