Rumah >pembangunan bahagian belakang >Tutorial Python >Bilakah Saya Harus Menggunakan ThreadPool Python Daripada Multiprocessing.Pool?
Threading Pools dalam Python: Alternatif kepada Pool multiprocessing
Kelas Pool modul multiprocessing menyediakan cara yang mudah untuk menyelaraskan kod menggunakan proses pekerja . Walau bagaimanapun, untuk kes penggunaan tertentu, mungkin lebih baik untuk memanfaatkan benang dan bukannya proses. Artikel ini meneroka antara muka Pool berasaskan benang alternatif yang tersedia dalam modul berbilang pemprosesan.
Pernyataan Masalah:
Seorang pengguna mencari perpustakaan Python yang menawarkan kelas "Pool" untuk proses pekerja threading, serupa dengan kelas Pool modul multiprocessing. Ini akan membolehkan penyelarasan tugas yang serupa dengan contoh berikut menggunakan Kolam pemproses berbilang:
def long_running_func(p): c_func_no_gil(p) p = multiprocessing.Pool(4) xs = p.map(long_running_func, range(100))
Walau bagaimanapun, pengguna ingin mengelakkan overhed yang berkaitan dengan mencipta proses baharu.
Penyelesaian:
Modul berbilang pemprosesan termasuk antara muka Pool berasaskan benang yang patut diterokai. Antara muka yang kurang dikenali ini boleh diimport menggunakan kelas ThreadPool daripada modul multiprocessing.pool:
from multiprocessing.pool import ThreadPool
Di sebalik tabir, kelas ThreadPool ini menggunakan kelas Proses dummy yang membalut benang Python. Kelas Proses dummy ini dilaksanakan dalam modul multiprocessing.dummy, yang menawarkan antara muka berbilang pemprosesan yang lengkap berdasarkan urutan.
Contoh Penggunaan:
Untuk menggunakan ThreadPool, instantiate objek ThreadPool dengan bilangan benang pekerja yang dikehendaki. Kemudian, gunakan kaedah peta untuk menyelaraskan fungsi merentas urutan pekerja.
# Create a ThreadPool with 4 worker threads pool = ThreadPool(4) # Parallelize the `long_running_func` on 100 inputs results = pool.map(long_running_func, range(100))
Atas ialah kandungan terperinci Bilakah Saya Harus Menggunakan ThreadPool Python Daripada Multiprocessing.Pool?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!