Multi-hilo notas de estudio Python

¿Qué es un tema?

El hilo (Inglés: hilo) es la unidad más pequeña de un sistema operativo capaz de operación de planificación. Se incluye en el proceso, la operación real del proceso de unidad. (Extracto de la Enciclopedia de Baidu) los recursos son compartidos entre los hilos

Lo que se multi-hilo?

Multihilo (Inglés: multithreading), medios para lograr la ejecución simultánea de la tecnología de múltiples hilos desde el software o hardware. Un ordenador con multi-threading capacidad debido al soporte de hardware y puede ejecutar más de un hilo, al mismo tiempo, mejorando así el rendimiento de procesamiento global (tomado de Baidu Enciclopedia)

¿Cómo entender la multi-roscado?

Multi-proceso equivalente a nuestro ordenador sólo abrir un navegador y abrir el reproductor de música. Y algunas de las operaciones llevadas a cabo por un equivalente de subprocesos múltiples reproductor de música en el interior, como la canción, pausa.

¿Cómo lograr multi-roscado

pitón multithreading para lograr dos módulos: thready threadingrara vez, más inclinados a la operativo subyacente, enrosque el módulo. en general, nos movemos con el módulo threading.
Esto es lo que solía escribir una pequeña py2.7 Demo, para analizar más o menos puesta en práctica y la acción de múltiples hebras.

# -*- coding: UTF-8 -*-
import threading

num = 1

def print_num(thread_name,num):
    while num<=20:
        print "%s:%d"%(thread_name,num)
        num+=1


try:
    t1 = threading.Thread(target=print_num,args=("Thread1",num))
    t2 = threading.Thread(target=print_num,args=("Thread2",num))
    t1.start()#开始线程1
    t2.start()#开始线程2
except:
    print "something error!"

Crear una función de la necesidad de utilizar varios subprocesos para threading.Thread(). En el que el parámetro de destino es el nombre de la función requiere múltiples hilos de ejecución, args parámetro para realizar la función de la necesidad de pasar parámetros
a continuación, start()para comenzar la ejecución.
Echemos un vistazo a los resultados:
Aquí Insertar imagen Descripción
se puede ver, aunque no del todo momento de empezar hilos 1 y 2, pero aún se puede ver que hay algunos puntos en común de tiempo de dos funciones que se ejecutan print_num, en general tienen que ejecutar dos funciones necesitan para funcionar en una para realizar una llamada se completa la siguiente ejecución, y multi-threading les permite al mismo tiempo. Si lo desea, al mismo tiempo numllevar a cabo operaciones, simplemente numvariables para una variable global.

¿Cuál es el demonio

Para el experimento, el hilo principal después del final de los dos sub-hilo para esperar hasta el final. Si desea directamente los extremos del hilo principal, puede utilizar setDaemon(True)conjunto de hilo de utilidad comienza antes de que el niño, tales como los siguientes:

# -*- coding: UTF-8 -*-
import threading

num1 = 1

def print_num(thread_name):
    global num1
    while num1<=1000://注意这里的停止范围
        num1 += 1
        print thread_name+":"+str(num1)

try:
    t1 = threading.Thread(target=print_num,args=("Thread1",))
    t2 = threading.Thread(target=print_num,args=("Thread2",))
    t1.setDaemon(True)//设置守护进程
    t2.setDaemon(True)
    t1.start()
    t2.start()
except:
    print "something error!"

El resultado es:
Aquí Insertar imagen Descripción
se puede ver, aunque conjunto num1 añade al final de 1000, pero de hecho num añadió 18 más.

¿Qué es un mutex? ¿Para qué sirve?

datos sucios pueden ocurrir cuando varios subprocesos modificar los mismos datos al mismo tiempo: los recursos mencionados anteriormente son compartidos entre los hilos, lo que crea un problema. Por ejemplo:
Hay dos hilos de t1, t2, y una variable de una global, t1 y t2 se realizan simultáneamente en una operación + 1-1. Una mirada parece tener ningún cambio, pero cuando la operación avanza a + t1 y t2, al mismo tiempo, a veces se convierte en un valor de 3 , en este momento si está utilizando se puede producir un problema de datos.
En este caso, necesitamos un mutex, t1, cuando se opera un bloqueo, no puede ser modificada para que una t2, t1, etc., y luego puesto en libertad una vez que el operativo completo
código es el siguiente:

# -*- coding: UTF-8 -*-
import threading

num1 = 1
lock = threading.Lock()

def print_num(thread_name):
    global num1

    while True:
        num1+=1
        num1-=1
        if num1 == 3:
            print thread_name+":"+str(num1)
            exit(0)

def run_thread(thread_name):
    lock.acquire()//获取锁
    try:
        print_num(thread_name)
    finally:
        lock.release()//释放锁
try:
    t1 = threading.Thread(target=run_thread,args=("Thread1",))
    t2 = threading.Thread(target=run_thread,args=("Thread2",))
    t1.start()
    t2.start()
except:
    print "something error!"

En este punto ya no se ejecutarán en este tema.

cerradura recursiva y asincrónica no han leído una actualización posterior

Artículo de referencia:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017629247922688

Publicado 37 artículos originales · ganado elogios 2 · Vistas 1419

Supongo que te gusta

Origin blog.csdn.net/weixin_44377940/article/details/104864149
Recomendado
Clasificación