Processen en threads gebruiken

Parallel programmeren met Dask in Python

James Fulton

Climate Informatics Researcher

Standaard Dask-scheduler

Threads

  • Dask arrays
  • Dask DataFrames
  • Vertraagde pipelines met dask.delayed()

Processen

  • Dask bags
Parallel programmeren met Dask in Python

De scheduler kiezen

# Standaard gebruiken
result = x.compute()

result = dask.compute(x)
# Threads gebruiken result = x.compute(scheduler='threads')
result = dask.compute(x, scheduler='threads')
# Processen gebruiken result = x.compute(scheduler='processes')
result = dask.compute(x, scheduler='processes')
Parallel programmeren met Dask in Python

Herhaling - threads vs. processen

Threads

  • Starten heel snel
  • Geen datatransfer nodig
  • Beperkt door de GIL: één thread leest tegelijk code

Processen

  • Opstarten kost tijd
  • Datatransfer is traag
  • Elk heeft een eigen GIL, dus geen beurtwisseling nodig
Parallel programmeren met Dask in Python

Een lokale cluster maken

from dask.distributed import LocalCluster

cluster = LocalCluster(
    processes=True, 
    n_workers=2,
    threads_per_worker=2
)

print(cluster)
LocalCluster(..., workers=2, threads=4, memory=31.38 GiB)
Parallel programmeren met Dask in Python

Een lokale cluster maken

from dask.distributed import LocalCluster

cluster = LocalCluster(
    processes=False, 
    n_workers=2,
    threads_per_worker=2
)

print(cluster)
LocalCluster(..., workers=2, threads=4, memory=31.38 GiB)
Parallel programmeren met Dask in Python

Eenvoudige lokale cluster

cluster = LocalCluster(processes=True)

print(cluster)
LocalCluster(..., workers=4 threads=8, memory=31.38 GiB)
cluster = LocalCluster(processes=False)

print(cluster)
LocalCluster(..., workers=1 threads=8, memory=31.38 GiB)
Parallel programmeren met Dask in Python

Een client maken

from dask.distributed import Client, LocalCluster
cluster = LocalCluster(
    processes=True, 
    n_workers=4,
    threads_per_worker=2
)

client = Client(cluster)
print(client)
<Client: 'tcp://127.0.0.1:61391' processes=4 threads=8, memory=31.38 GiB>
Parallel programmeren met Dask in Python

Eenvoudig een client maken

Maak eerst een cluster en geef die door aan de client

cluster = LocalCluster(
    processes=True, 
    n_workers=4,
    threads_per_worker=2
)

client = Client(cluster)

print(client)
<Client: ... processes=4 threads=8, ...>

Maak een client die zelf een cluster aanmaakt

client = Client(
    processes=True, 
    n_workers=4,
    threads_per_worker=2
)



print(client)
<Client: ... processes=4 threads=8, ...>
Parallel programmeren met Dask in Python

De cluster gebruiken

client = Client(processes=True)

# Standaard gebruikt de client
result = x.compute()

# Je kunt een andere scheduler kiezen result = x.compute(scheduler='threads')
# Client expliciet gebruiken kan ook result = client.compute(x)
Parallel programmeren met Dask in Python

Andere soorten clusters

  • LocalCluster() - Een cluster op je computer.
  • Andere clustertypes verdelen werk over meerdere computers
Parallel programmeren met Dask in Python

Laten we oefenen!

Parallel programmeren met Dask in Python

Preparing Video For Download...