Locks en Python
Proteger el estado compartido para que los hilos no lo corrompan.
import threading
total = 0
candado = threading.Lock()
def agregar_muchos(veces):
global total
for _ in range(veces):
with candado:
total += 1
hilos = [threading.Thread(target=agregar_muchos, args=(10_000,))
for _ in range(4)]
for t in hilos:
t.start()
for t in hilos:
t.join()
Cómo funciona
- Cuatro hilos incrementan todos el mismo
total. with candado:vuelve atómico cada incremento.joinespera a que cada hilo termine.
Palabras clave y builtins usados aquí
defforglobalrangewith
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 281
- Tokens
- 81
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 46 segundos.
Paso 2 de 4 en Hilos y procesos; paso 29 de 53 en Python pythónico.