Módulo Threading de Python
El módulo threading te permite ejecutar varios hilos en el mismo proceso y coordinarlos con bloqueos.
import threading
Los hilos son útiles cuando hay que esperar E/S, como peticiones de red u operaciones con archivos. Normalmente no son la mejor forma de acelerar código Python muy exigente para la CPU.
Iniciar un hilo
import threading
def worker():
print('working')
thread = threading.Thread(target=worker)
thread.start()
thread.join()
working
start() inicia el hilo. join() espera a que termine antes de que continúe el programa principal.
Pasar argumentos
import threading
def greet(name):
print(f'hello {name}')
thread = threading.Thread(target=greet, args=('Ada',))
thread.start()
thread.join()
hello Ada
Usa args para argumentos posicionales y kwargs para argumentos con nombre.
Usar un bloqueo
Los bloqueos ayudan a proteger el estado compartido.
import threading
counter = 0
lock = threading.Lock()
with lock:
counter += 1
print(counter)
1
Ejecutar varios hilos
import threading
results = []
lock = threading.Lock()
def worker(number):
with lock:
results.append(f'worker {number}')
threads = []
for number in range(3):
thread = threading.Thread(target=worker, args=(number,))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
print(sorted(results))
['worker 0', 'worker 1', 'worker 2']
El orden real de finalización puede variar porque los hilos se ejecutan concurrentemente, así que este ejemplo ordena el resultado antes de imprimirlo.