Futures según terminan en Python
Reaccionar a los resultados en orden de término, no de envío.
from concurrent.futures import ThreadPoolExecutor, as_completed
import time
def trabajo(nombre, segundos):
time.sleep(segundos)
return nombre
with ThreadPoolExecutor() as pool:
futures = {pool.submit(trabajo, f"tarea-{i}", i / 10): i
for i in range(3, 0, -1)}
orden = []
for futuro in as_completed(futures):
orden.append(futuro.result()) # el más rápido llega primero
Cómo funciona
submitagenda cada trabajo y devuelve un future.as_completedproduce los futures apenas terminan.- La tarea más rápida llega primero sin importar el orden.
Palabras clave y builtins usados aquí
asdefforrangereturnwith
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 372
- Tokens
- 92
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 50 segundos.
Paso 4 de 4 en Hilos y procesos; paso 31 de 53 en Python pythónico.