typestar

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

  1. submit agenda cada trabajo y devuelve un future.
  2. as_completed produce los futures apenas terminan.
  3. La tarea más rápida llega primero sin importar el orden.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 4 de 4 en Hilos y procesos; paso 31 de 53 en Python pythónico.

← Anterior Siguiente →