Есть ли возможность распараллелить следующий код в Python? Мне было интересно, как преобразовать этот код с помощью функций карты и лямбды ..

values = (1,2,3,4,5 )

def op(x,y):
    return x+y

[(i, j, op(i, j))
        for i in values
        for j in values
        if i is not j]
1
PeCaDe 24 Апр 2017 в 16:06

2 ответа

Лучший ответ

Вы можете распараллелить функцию op с многопроцессорностью и отображением:

from multiprocessing.dummy import Pool as ThreadPool
from itertools import permutations

pool = ThreadPool(4)  # Number of threads

values = (1,2,3,4,5)
aux_val = [(i, j) for i,j in permutations(values,2)]

def op(tupx):
    result = (tupx[0], tupx[1], tupx[0] + tupx[1])
    return result

results = pool.map(op, aux_val)
2
Oscar Hortelano 24 Апр 2017 в 13:56

Проверь это:

from itertools import permutations

values = (1,2,3,4,5 )
[(i, j, i+j) for i, j in permutations(values, 2)]

Это в stdlib Python.

Если вы хотите работать параллельно, проверьте это с помощью python3:

import multiprocessing
from itertools import permutations

values = [1, 2, 3, 4, 5]
l = permutations(values, 2)


def f(x):
    return x[0], x[1], x[0] + x[1]

with multiprocessing.Pool(5) as p:
    data = p.map(f, l)
2
gushitong 24 Апр 2017 в 14:14