Rumah >pembangunan bahagian belakang >Tutorial Python >Kaedah Kolam Mana Yang Harus Saya Gunakan dalam Pemprosesan Berbilang Python?

Kaedah Kolam Mana Yang Harus Saya Gunakan dalam Pemprosesan Berbilang Python?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 13:58:31830semak imbas

Which Pool Method Should I Use in Python Multiprocessing?

Pemprosesan Berbilang.Kolam: Kaedah Mana Yang Perlu Saya Gunakan?

Pemprosesan berbilang membenarkan Python melaksanakan fungsi secara serentak merentas berbilang proses. Walau bagaimanapun, memilih kaedah yang sesuai boleh mengelirukan, terutamanya apabila mempertimbangkan Pool.apply, Pool.apply_async dan Pool.map. Mari kita jelaskan perbezaan dan kes penggunaan mereka:

Pool.apply vs. Pool.apply_async vs. Pool.map

1. Pool.apply:

  • Memanggil fungsi dalam proses berasingan dan menyekat proses semasa sehingga fungsi itu kembali.
  • Gunakan apabila anda perlu melakukan satu panggilan fungsi dan tunggu keputusan segera.

2. Pool.apply_async:

  • Serupa dengan Pool.apply, memanggil fungsi dalam proses yang berasingan, tetapi kembali serta-merta.
  • Mengembalikan objek AsyncResult yang membolehkan anda mendapatkan semula keputusan kemudian.
  • Menyokong fungsi panggil balik yang dipanggil apabila hasilnya tersedia.
  • Berguna untuk pemprosesan tak segerak bagi panggilan berbilang fungsi.

3. Pool.map:

  • Memanggil fungsi yang sama pada jujukan hujah secara selari.
  • Sekat sehingga semua keputusan diperoleh.
  • Mengekalkan susunan daripada hujah dan keputusan.
  • Sesuai untuk menggunakan fungsi yang sama pada berbilang titik data dan mendapatkan senarai hasil dalam susunan yang sama.

Memilih Kaedah yang Betul

Gunakan Pool.mohon jika:

  • Anda perlu menyekat sehingga satu fungsi kembali.
  • Anda tidak mahu berurusan dengan tak segerak pemprosesan.

Gunakan Pool.apply_async jika:

  • Anda mahu memanggil berbilang fungsi secara tak segerak dan mendapatkan semula keputusannya kemudian.
  • Anda mahu menggunakan panggilan balik untuk mengendalikan keputusan.

Gunakan Pool.map jika:

  • Anda perlu menggunakan fungsi yang sama pada berbilang argumen serentak.
  • Anda mahu mengekalkan susunan hujah-hasil.

Contoh: Panggilan Balik Asynchronous dalam Pool.apply_async

<code class="python">import multiprocessing as mp
import time

def foo_pool(x):
    time.sleep(2)
    return x*x

result_list = []
def log_result(result):
    result_list.append(result)

def apply_async_with_callback():
    pool = mp.Pool()
    for i in range(10):
        pool.apply_async(foo_pool, args = (i, ), callback = log_result)
    pool.close()
    pool.join()
    print(result_list)

if __name__ == '__main__':
    apply_async_with_callback()</code>

Output:

[1, 0, 4, 9, 25, 16, 49, 36, 81, 64]

Perhatikan bahawa susunan keputusan mungkin tidak sejajar dengan susunan panggilan fungsi, tidak seperti Pool.map.

Atas ialah kandungan terperinci Kaedah Kolam Mana Yang Harus Saya Gunakan dalam Pemprosesan Berbilang Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn