Süreçler ve iş parçacıkları kullanma

Python ile Dask ile Paralel Programlama

James Fulton

Climate Informatics Researcher

Dask varsayılan zamanlayıcı

İş parçacıkları

  • Dask arrays
  • Dask DataFrames
  • dask.delayed() ile oluşturulan gecikmeli ardışık düzenler

Süreçler

  • Dask bags
Python ile Dask ile Paralel Programlama

Zamanlayıcı seçimi

# Varsayılanı kullan
result = x.compute()

result = dask.compute(x)
# İş parçacıklarını kullan result = x.compute(scheduler='threads')
result = dask.compute(x, scheduler='threads')
# Süreçleri kullan result = x.compute(scheduler='processes')
result = dask.compute(x, scheduler='processes')
Python ile Dask ile Paralel Programlama

Özet - iş parçacıkları vs. süreçler

İş parçacıkları

  • Başlatması çok hızlıdır
  • Veriyi onlara aktarmaya gerek yoktur
  • GIL ile sınırlıdır; aynı anda bir iş parçacığı kodu yürütür

Süreçler

  • Kurulumu zaman alır
  • Veriyi aktarmak yavaştır
  • Her birinin kendi GIL'i vardır; kod yürütmede sıra beklemezler
Python ile Dask ile Paralel Programlama

Yerel küme oluşturma

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)
Python ile Dask ile Paralel Programlama

Yerel küme oluşturma

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)
Python ile Dask ile Paralel Programlama

Basit yerel küme

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)
Python ile Dask ile Paralel Programlama

İstemci oluşturma

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>
Python ile Dask ile Paralel Programlama

Kolayca istemci oluşturma

Kümeyi oluşturup istemciye aktarın

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

client = Client(cluster)

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

Kendi kümesini oluşturacak bir istemci oluşturun

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



print(client)
<Client: ... processes=4 threads=8, ...>
Python ile Dask ile Paralel Programlama

Kümeyi kullanma

client = Client(processes=True)

# Varsayılan olarak istemciyi kullanır
result = x.compute()

# Diğer zamanlayıcılara geçilebilir result = x.compute(scheduler='threads')
# İstemci açıkça kullanılabilir result = client.compute(x)
Python ile Dask ile Paralel Programlama

Diğer küme türleri

  • LocalCluster() - Bilgisayarınızda bir küme.
  • Diğer küme türleri hesaplamayı farklı bilgisayarlara böler
Python ile Dask ile Paralel Programlama

Hadi pratik yapalım!

Python ile Dask ile Paralel Programlama

Preparing Video For Download...