Menggunakan proses dan thread

Pemrograman Paralel dengan Dask di Python

James Fulton

Climate Informatics Researcher

Scheduler default Dask

Thread

  • Dask array
  • Dask DataFrame
  • Pipeline tertunda dibuat dengan dask.delayed()

Proses

  • Dask bag
Pemrograman Paralel dengan Dask di Python

Memilih scheduler

# Gunakan default
result = x.compute()

result = dask.compute(x)
# Gunakan thread result = x.compute(scheduler='threads')
result = dask.compute(x, scheduler='threads')
# Gunakan proses result = x.compute(scheduler='processes')
result = dask.compute(x, scheduler='processes')
Pemrograman Paralel dengan Dask di Python

Ringkasan - thread vs proses

Thread

  • Sangat cepat diinisialisasi
  • Tidak perlu transfer data ke sana
  • Dibatasi oleh GIL, yang mengizinkan satu thread membaca kode pada satu waktu

Proses

  • Perlu waktu untuk menyiapkan
  • Lambat untuk transfer data
  • Masing-masing punya GIL sendiri sehingga tidak perlu bergiliran membaca kode
Pemrograman Paralel dengan Dask di Python

Membuat cluster lokal

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)
Pemrograman Paralel dengan Dask di Python

Membuat cluster lokal

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)
Pemrograman Paralel dengan Dask di Python

Cluster lokal sederhana

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)
Pemrograman Paralel dengan Dask di Python

Membuat client

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>
Pemrograman Paralel dengan Dask di Python

Membuat client dengan mudah

Buat cluster lalu berikan ke client

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

client = Client(cluster)

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

Buat client yang akan membuat clusternya sendiri

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



print(client)
<Client: ... processes=4 threads=8, ...>
Pemrograman Paralel dengan Dask di Python

Menggunakan cluster

client = Client(processes=True)

# Default menggunakan client
result = x.compute()

# Tetap bisa ganti ke scheduler lain result = x.compute(scheduler='threads')
# Dapat menggunakan client secara eksplisit result = client.compute(x)
Pemrograman Paralel dengan Dask di Python

Jenis cluster lain

  • LocalCluster() - Cluster di komputer Anda.
  • Jenis cluster lain membagi komputasi ke beberapa komputer
Pemrograman Paralel dengan Dask di Python

Ayo berlatih!

Pemrograman Paralel dengan Dask di Python

Preparing Video For Download...