windows - Parallel.For i Python

Indlæg af Hanne Mølgaard Plasc

Problem



Er der noget der ligner C # s fremragende Parallel.For i Python? Jeg vil bare lave en beregning som


[simu(c) for c in clusterSizes]


parallelt. Hvad er den nemmeste måde at arkivere det på?


PS: Jeg prøvede joblib, men i mine tilfælde starter det bare, starter og starter processer, indtil jeg skal genstarte min maskine.

Bedste reference


I python 3 er der parallelt kort i samtidige fakulteter (i standardbiblioteket). Jeg synes, det var endda tilbageført som et modul til python 2.7.
Rediger http://pypi.python.org/pypi/futures[12][13]


Som det fremgår af andet svar, vil tråde ikke hjælpe dig. I stedet skal du bruge flere processer.


Rediger fra docs det virker så simpelt som dette:


with concurrent.futures.ProcessPoolExecutor() as executor:
    for result in executor.map(simu, clusterSizes)
        pass # save result

Andre referencer 1


joblib er baseret på multiprocessing og har det samme problem på Windows, at @EwyynTomato påpeger i kommentarerne: Hovedindgangspunktet for scriptet skal beskyttes af en \_\_name\_\_ == "\_\_main\_\_" check.


from joblib import Parallel, delayed

if \_\_name\_\_ == "\_\_main\_\_":
    result = Parallel(n\_jobs=-1)(delayed(simu)(c) for c in clusterSizes)
    # process result

Andre referencer 2


i pakken multiprocessing kan du oprette et Pool objekt og bruge en map metode:


se http://docs.python.org/library/multiprocessing.html[15]


Som med joblib skal du beskytte hovedindgangspunktet med \_\_name\_\_ == "\_\_main\_\_" ellers vil du oprette en gaffelbombe (og skal genstarte din computer, når du importerer dit script).


Funktionen du kortlægger skal vælges.

Andre referencer 3


Jeg skrev en lille pakke, der kunne være til hjælp:


from python-parallel-collections import parallel

#equal to [simu(c) for c in clusterSizes]
#performed in parallel using multiple processes
#the results are only evaluated on demand, such as with the call to list below
parallel\_gen = parallel(clusterSizes)
lazy\_results = parallel\_gen.map(simu)
evaluated\_results = list(lazy\_results)


Dette er Python 2,7 og kræver


pip install futures

pip install python-parallel-collections


Lad mig vide hvad du tænker
https://github.com/gterzian/Python-Parallel-Collections[16]

Andre referencer 4


Brug et andet sprog. På grund af GIL (Global Interpreter Lock) Ikke-IO-bundet parallelisme i Python er det ikke meget effektivt.