Cómo destruir un hilo de Python
O "Java usa sincronizado (esto) para completar la sección crítica del subproceso", "Exclusión mutua de subprocesos de Linux" (haga clic para abrir el enlace) y "C+ +Creación, ejecución, exclusión mutua, sincronización y destrucción de subprocesos de Windows" (haga clic para abrir el enlace) para explicar la aplicación de subprocesos múltiples en Python, que implica la creación y ejecución.
Los resultados de ejecución son los siguientes, casi los mismos. Después de ejecutarse tres veces, los resultados finales de la votación de cada hilo son diferentes, pero la suma de los votos finales de los cuatro hilos es 100.000, lo que demuestra que los cuatro hilos lograron con éxito la exclusión mutua.
Aunque los resultados de cada ejecución son diferentes, se puede observar que los resultados de cada ejecución son promedio. Python parece ser mejor que Java cuando se trata de manejar recursos del sistema para subprocesos.
Pero Python siempre implementa subprocesos múltiples y el código no es tan simple como se imagina, como sigue:
[python] ¿Ver impresión de texto sin formato? Vea fragmentos de código derivados de mis fragmentos de código en Código.
#-*-Encoding:utf-8-*-
Importar hilo;
Mutex = hilo. RLock(); #Declaración de bloqueo mutex
Ticket = 100000; #Número total de votos
# Se utiliza para contar los votos de cada hilo.
boleto _ para _ hilo 1 = 0
boleto _ para _ hilo 2 = 0
boleto _ para _ hilo 3 = 0; p>
ticket _ para _ hilo 2 = 0; p>
ticket _ para _ hilo 4 = 0
Clase mythread(thread.thread): #Controlador de hilo
def __init__(self, nombre):
p>
threading . _ _ init _ _(self); #Inicialización necesaria de la clase de hilo
self.thread _ name = name #Construya el nombre pasado en el nombre de la clase.
Definir ejecución (self):
#Declarar el uso de variables globales en la clase
Bloqueo mutex global;
Ticket global
Ticket global _ para _ hilo 1
Ticket global _ para _ hilo2
ticket global _ para _ hilo3
global ticket_for_thread4
Y 1:
mutex_lock adquirir(); #Comienza la sección crítica, comienza la exclusión mutua
#Puede haber solo debe haber un hilo ↓↓↓↓↓↓
If ticket>0:
ticket-= 1;
#Calcular la ubicación del ticket obtenido por el hilo
Imprimir "¡%s tiene un ticket! Votos restantes: % d. " % (self.thread_name, ticket);
if self . :
ticket _ para _ hilo 1+= 1;
Elif self.thread_name == "hilo 2 ":
ticket _ para _ hilo 2+ = 1;
p>Elif self.thread_name == "hilo 3":
boleto _ para _ hilo 3+= 1;
Elif self. thread_name == "hilo 4 " :
ticket _ para _ hilo 4+=
De lo contrario:
Romper
#Solo puede haber un hilo↓ ↓↓↓↓↓↓↓.
mutex _ lock . release(); #Fin de la sección crítica, fin de la exclusión mutua
mutex _ lock(); # python no limpiará la función del hilo. el hilo muere El proceso debe limpiar activamente los mutex existentes.
¡La impresión "%s" está dañada! "%(self . hilo _ nombre);
#Inicializar hilo
hilo 1 = miHilo(" hilo 1 ");
hilo 2 = miHilo( " hilo 2 ");
hilo 3 = miHilo(" hilo 3 "
Hilo 4 = miHilo(" Hilo 4 "
#); Abrir hilo
hilo 1. start();
hilo 2. start();
hilo 3. start();
thread 4. start();
#Espere hasta que los threads 1, 2, 3 y 4 terminen de ejecutar el siguiente código (sincrónicamente)
thread 1. join();
p>hilo 2. unirse();
hilo 3. unirse();
hilo 4. unirse();
Imprimir "todos Todas las entradas estaban agotadas.
¡Vámonos todos! ";
Imprimir "= = = = = = =estadísticas de votos= = = = = = = ";
imprimir " hilo 1:% d " %(ticket _ for _ hilo 1);
Imprimir "hilo 2:% d" %(ticket _ para _ hilo 2
imprimir "hilo 3:% d " %(ticket _ para _); thread 3);
Imprimir "Thread 4:% d" %(ticket _ for _ thread 4
1); Para usar subprocesos en 7, debe usar subprocesos en lugar del antiguo módulo de subprocesos.
Si usa subprocesos para implementar subprocesos en Python 2.7, como algunos artículos que quedan en Internet, al menos obtendrá uno. Error de Pydev. de Eclipse: falta sys.excepthook, el sys.stderr perdido se muestra a continuación:
Por lo tanto, el hilo recomendado por Python debe usarse actualmente.
2. lenguajes de programación, declara una interacción. Bloqueos de exclusión y una serie de votos Al igual que Java, Python implementa la función de subproceso para anular una clase. El uso de variables globales en la clase es el mismo que el uso de phpglobal y variables globales (haga clic). para abrir el enlace). Use global para usar esta variable global en lugar de usarla directamente en C/C++.
3. la clase myThread(threading), Python El mutex debe borrarse manualmente. A diferencia de otros lenguajes de programación, Python borrará naturalmente el mutex creado por el hilo después de ejecutar el método def run(self) si el mutex no se borra manualmente. la última oración. Provoca un punto muerto.
4. Finalmente, al igual que otros lenguajes de programación, el método de unión del hilo puede esperar a que el hilo termine de ejecutar todo el código en el método def run(self) antes de ejecutar el código posterior. para lograr la sincronización, el código en la función principal es equivalente al hilo principal. El hilo iniciado por la función principal es equivalente a su hilo secundario y no se afecta entre sí.