Вы можете использовать модуль multiprocessing
:
from multiprocessing import Pool
from itertools import product
if __name__ == "__main__":
l1 = ['a', 'b', 'c', 'd', 'e']
l2 = [1, 2, 3]
n = 2
with Pool(n) as pool:
pool.starmap(fun, product(l1, l2))
Используя product
, мы создаем все пары подряд:
>>> list(product(['a', 'b'], [1, 2]))
[('a', 1), ('a', 2), ('b', 1), ('b', 2)]
Затем мы можем создать Pool
с n
процессами и передать каждую пару в fun
с помощью функции starmap
.
Создав Pool
и передав первый параметр n
, мы имеем n
процессов, которые берут каждый элемент из product
по порядку, таким образом, это создает именно тот эффект, который вы искали - всякий раз, когда один из них освобождается, он берет следующую пару в строке.