UNPKG

@huggingface/hub

Version:

Utilities to interact with the Hugging Face hub

26 lines (25 loc) 686 B
/** * Execute queue of promises in a streaming fashion. * * Optimized for streaming: * - Expects an iterable as input * - Does not return a list of all results * * Inspired by github.com/rxaviers/async-pool */ export async function promisesQueueStreaming<T>( factories: AsyncIterable<() => Promise<T>> | Iterable<() => Promise<T>>, concurrency: number ): Promise<void> { const executing: Promise<void>[] = []; for await (const factory of factories) { const e = factory().then(() => { executing.splice(executing.indexOf(e), 1); }); executing.push(e); if (executing.length >= concurrency) { await Promise.race(executing); } } await Promise.all(executing); }