English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Paralelismo basado en hilos en Python

En la ciencia de la computación, un hilo es un conjunto de instrucciones que puede ser gestionado independientemente por el programador, que es una parte del sistema operativo.

La función principal de los hilos es ejecutar múltiples hilos a la vez. Un hilo significa diferentes tareas, llamadas de funciones en el programa y múltiples hilos ejecutándose simultáneamente, lo que no significa que se ejecuten en diferentes computadoras.

Se utilizan hilos en ambos casos.

  • Cuando la salida del subprograma necesita combinarse con el programa principal.

  • Cuando el programa principal contiene código que se encuentra en forma independiente.

Módulo de hilos

Python proporciona un módulo de hilos muy potente y también proporciona soporte avanzado para hilos.

El módulo de hilos define muchas funciones, que se utilizan para obtener datos relacionados con los hilos y que se ejecutan automáticamente.

threading.active_count()

Esta función devuelve el número de objetos Thread activos. Aquí, el recuento devuelto es igual a la longitud de la lista devueltaenumerate().

threading.current_thread()

Esta función devuelve el objeto Thread actual, que corresponde al hilo de control del llamador.

threading.get_ident()

Esta función devuelve el "identificador de hilo" del hilo actual. Es un entero no nulo.

threading.enumerate()

此函数返回当前活动的所有Thread对象(包括守护线程)的列表,current_thread()函数创建虚拟线程和主线程,并排除终止的线程和尚未启动的线程。

threading.main_thread()

该函数返回主线程对象。

threading.settrace(func)

在从线程模块启动所有线程后,请设置跟踪功能。在run()在调用此方法之前,此函数将为每个线程传递给sys.settrace()。

threading.setprofile(func)

在从线程模块启动所有线程后,请设置配置文件功能。在run()在调用此方法之前,此函数将为每个线程传递给sys.setprofile()。

threading.stack_size([size])

该函数返回线程堆栈的大小,并在创建新线程时使用。

线程。TIMEOUT_MAX

这是一个常量,具有阻塞函数的超时参数(Lock.acquire(),RLock.acquire(),Condition.wait()等)的最大值。

Example code

import threading
def trace_function():
   print("Passing the trace function")
   def profile():
      print("PROFILE THREAD: ") + str(threading.current_thread().getName()))
      class mythread(threading.Thread):
      def __init__(self, thread_name, thread_ID):
         threading.Thread.__init__(self)
         self.thread_name = thread_name
         self.thread_ID = thread_ID
      def run(self):
         print(str(self.thread_ID));
         print("ACTIVE THREADS ARE: ")+ str(threading.active_count()))
         print("CURRENT THREAD IS: ") + str(threading.current_thread().getName()))
         my_thread1 mythread("PP", 500)
         my_thread2 mythread("PythonProgram", 1000);
         print("NOMBRE DEL HILO PRINCIPAL: ") + str(threading.main_thread().getName()))
         print("IDENTIFICACIÓN DEL HILO PRINCIPAL: ")+ str(threading.get_ident()))
         print("TAMAÑO DE PILA = ") + str(threading.stack_size()))
      print(threading.settrace(trace_function()))
   threading.setprofile(profile())
my_thread1.start()
my_thread2.start()
print("LISTA DE ENUMERACIÓN: ")
print(threading.enumerate())
print("SALIR")

Resultado de la salida

NOMBRE DEL HILO PRINCIPAL: MainThread
IDENTIFICACIÓN DEL HILO PRINCIPAL: 5436
TAMAÑO DE PILA = 0
Pasando la función de rastreo
None
THREAD DE PROFILADO: MainThread
500
1000LISTA DE ENUMERACIÓN: Hilos activos: 6
[<_MainThread(MainThread, iniciado 5436))>, <Thread(Thread-4, iniciado daemon 1960)>, <Heartbeat(Thread-5, iniciado daemon 6452))>, <HistorySavingThread(IPythonHistorySavingThread, iniciado 4304))>, <mythread(Thread-8, iniciado 8460)>, <mythread(Thread-9, iniciado 4668))]
SALIR
Hilo actual: Hilo-8
Hilos activos: 5
Hilo actual: Hilo-9