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.

Enlaces relacionados