Penggabungan Berasaskan Benang dalam Berbilangpemprosesan
Modul berbilangpemprosesan menawarkan kelas "Pool" yang berkuasa untuk menyelaraskan tugas menggunakan proses berasingan. Walau bagaimanapun, pendekatan ini menanggung overhed disebabkan penciptaan proses. Untuk operasi terikat IO dengan GIL yang dikeluarkan semasa panggilan fungsi sebenar, menggunakan benang boleh menghasilkan prestasi yang lebih baik.
Memperkenalkan Kelas ThreadPool
Bertentangan dengan kepercayaan popular, modul multiprocessing sememangnya menyediakan antara muka kolam berasaskan benang. Permata tersembunyi ini, boleh diakses melalui import multiprocessing.pool ThreadPool, menawarkan cara yang mudah untuk menyelaraskan tugasan menggunakan benang.
Walaupun statusnya tidak didokumenkan, kelas ThreadPool melaksanakan antara muka kolam berbilang pemprosesan menggunakan kelas Proses dummy yang membalut python benang. Kelas Proses dummy ini terdapat dalam modul multiprocessing.dummy, yang menawarkan keseluruhan antara muka berbilang pemprosesan berdasarkan urutan.
Contoh Penggunaan
Serupa dengan ProcessPool, ThreadPool boleh digunakan untuk menyelarikan peta fungsi:
import multiprocessing.pool def long_running_func(p): c_func_no_gil(p) p = multiprocessing.pool.ThreadPool(4) xs = p.map(long_running_func, range(100))
Nota: Kelas ThreadPool tidak secekap ProcessPool untuk semua kes, terutamanya apabila tugas memerlukan masa CPU yang ketara.
Atas ialah kandungan terperinci Bilakah Saya Perlu Menggunakan `ThreadPool` Tanpa Dokumen Python untuk Pemprosesan Selari?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!