0Pricing
Python Academy · Pelajaran

Dasar-Dasar multiprocessing

Gunakan beberapa inti CPU

Dasar-Dasar multiprocessing adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Mengapa multiproses?

GIL mencegah utas menjalankan kode bita Python secara paralel. Modul multiproses mengatasi hal ini dengan meluncurkan proses terpisah, masing-masing dengan penerjemah dan GIL-nya sendiri, sehingga pekerjaan yang terikat CPU benar-benar berjalan pada beberapa inti.

import multiprocessing as mp
print('CPU cores available:', mp.cpu_count())

Memulai Process

Process(target=func) mencerminkan API pengutasan. Panggil start() untuk meluncurkan proses dan join() untuk menunggu.

import multiprocessing as mp

def worker():
    print('hello from a child process')

if __name__ == '__main__':
    p = mp.Process(target=worker)
    p.start()
    p.join()
    print('parent done')

Penjagaan __main__

Di beberapa platform, proses anak mengimpor skrip Anda. Tanpa penjagaan if __name__ == '__main__':, Anda dapat membuat proses secara rekursif. Selalu bungkus kode peluncuran di dalamnya.

import multiprocessing as mp

def task(n):
    print('processing', n)

if __name__ == '__main__':
    for i in range(3):
        p = mp.Process(target=task, args=(i,))
        p.start()
        p.join()

Meneruskan Argumen

Gunakan args untuk argumen posisi dan kwargs untuk argumen kata kunci, sama seperti pada utas. Argumen diserialisasikan dan dikirim ke proses anak.

import multiprocessing as mp

def show(label, times):
    for _ in range(times):
        print(label)

if __name__ == '__main__':
    p = mp.Process(target=show, args=('hi',), kwargs={'times': 2})
    p.start()
    p.join()

Pool Pekerja

multiprocessing.Pool mengelola sekelompok proses. pool.map membagi objek yang dapat diiterasi di antara proses-proses tersebut dan mengumpulkan hasilnya secara berurutan.

import multiprocessing as mp

def square(n):
    return n * n

if __name__ == '__main__':
    with mp.Pool(processes=2) as pool:
        print(pool.map(square, range(6)))

ProcessPoolExecutor

API concurrent.futures juga menyediakan ProcessPoolExecutor, dengan antarmuka submit/map yang sama seperti yang Anda lihat pada utas.

from concurrent.futures import ProcessPoolExecutor

def cube(n):
    return n ** 3

if __name__ == '__main__':
    with ProcessPoolExecutor() as ex:
        print(list(ex.map(cube, range(5))))

Ruang Memori Terpisah

Setiap proses memiliki memorinya sendiri. Mengubah variabel global dalam proses anak tidak mengubah salinannya pada proses induk. Data harus dikembalikan atau dibagikan secara eksplisit.

import multiprocessing as mp

counter = 0

def bump():
    global counter
    counter += 100

if __name__ == '__main__':
    p = mp.Process(target=bump)
    p.start()
    p.join()
    print('parent counter still:', counter)

Mengembalikan Hasil

Karena memori tidak dibagikan, kembalikan hasil melalui Pool.map, eksekutor, atau antrean, bukan dengan mengubah variabel global.

import multiprocessing as mp

def double(n):
    return n * 2

if __name__ == '__main__':
    with mp.Pool(2) as pool:
        results = pool.map(double, [1, 2, 3, 4])
    print('results:', results)

apply_async untuk Pemanggilan Tunggal

apply_async menjadwalkan satu pemanggilan dan mengembalikan objek hasil. Panggil .get() untuk mengambil nilainya.

import multiprocessing as mp

def add(a, b):
    return a + b

if __name__ == '__main__':
    with mp.Pool(2) as pool:
        r = pool.apply_async(add, (3, 4))
        print(r.get())

Persyaratan Serialisasi

Target dan argumen harus dapat diserialisasikan agar dapat melewati batas antarproses. Fungsi tingkat teratas dapat digunakan; lambda dan fungsi lokal biasanya tidak dapat digunakan.

import multiprocessing as mp

def top_level(n):
    return n + 1

if __name__ == '__main__':
    with mp.Pool(2) as pool:
        print(pool.map(top_level, [10, 20]))

Kapan Menggunakan Proses

Gunakan proses untuk pekerjaan yang terikat CPU: perhitungan matematika, pemrosesan gambar, dan penguraian. Beban tambahan saat membuat proses dan melakukan serialisasi membuatnya lebih cocok untuk sedikit tugas yang berat daripada banyak tugas kecil.

import multiprocessing as mp

def heavy(n):
    return sum(i * i for i in range(n))

if __name__ == '__main__':
    with mp.Pool() as pool:
        print(pool.map(heavy, [1000, 2000, 3000]))

Pemeriksaan Singkat

Uji pemahaman Anda tentang multiproses.

Ringkasan

Anda mempelajari dasar-dasar multiproses:

  • Proses melewati GIL sehingga paralelisme CPU yang nyata dapat dilakukan.
  • Gunakan penjagaan if __name__ == '__main__'.
  • Pool dan ProcessPoolExecutor membagi pekerjaan dan mengumpulkan hasil.
  • Memori tidak dibagikan; argumen harus dapat diserialisasikan.

Berikutnya: berbagi data dengan aman menggunakan antrean dan kunci.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Dasar-Dasar multiprocessing” gratis?

Ya — teks lengkap “Dasar-Dasar multiprocessing” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Dasar-Dasar multiprocessing”?

Gunakan beberapa inti CPU Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Dasar-Dasar multiprocessing” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Thread dan GIL
  2. ThreadPoolExecutor
  3. Dasar-Dasar multiprocessing
  4. Berbagi Data dengan Aman
← Kembali ke Python Academy