Это хорошо подходит для multiprocessing.Pool
.
Создайте свой пустой массив, затем создайте итератор из 2-х кортежей всех возможных значений i
и j
.Например, с itertools.combinations
.
In [1]: import itertools
In [7]: list(itertools.combinations(range(4), 2))
Out[7]: [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]
(Конечно, вы должны использовать длину вашего вектора в качестве аргумента для range
.)
Напишите следующую функцию:
def worker(pair):
i, j = pair
rv = False
if f(X[i],X[j]) < T:
rv = True
return (i, j, rv)
Создайте Pool
и запустите imap_unordered
:
p = multiprocessing.Pool()
for i, j, result in p.imap_unordered(worker, itertools.combinations(range(len(X)), 2)):
if result:
print('Good pair:', i, j)
# do something with the results...
Это позволит запустить столько рабочих, сколько у вас процессорных ядер.