File size: 723 Bytes
1d11011
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import concurrent.futures
import itertools
from typing import Callable, Iterable


def execute_multithread(func: Callable, inputs: Iterable, n_workers):
    with concurrent.futures.ThreadPoolExecutor(max_workers=n_workers) as executor:
        futures = {
            executor.submit(func, **task)
            for task in itertools.islice(inputs, n_workers)
        }

        while futures:
            done, futures = concurrent.futures.wait(
                futures, return_when=concurrent.futures.FIRST_COMPLETED
            )

            for future in done:
                yield future.result()

            for task in itertools.islice(inputs, len(done)):
                futures.add(executor.submit(func, **task))