Kolam Berasaskan Benang: Alternatif kepada Kolam Pemprosesan Berbilang
Pemprosesan berbilang dalam Python menyediakan mekanisme berkuasa untuk pemprosesan selari menggunakan berbilang proses. Kelas multiprocessing.Pool menawarkan antara muka yang mudah untuk mengurus proses pekerja dan mengagihkan tugas. Walau bagaimanapun, apabila proses wajaran berat tidak diingini, adakah terdapat penyelesaian serupa yang menggunakan benang sebaliknya?
Ya, terdapat permata tersembunyi dalam modul berbilang pemprosesan yang menawarkan selari berasaskan benang: kelas ThreadPool. Untuk mengaksesnya, importnya menggunakan:
from multiprocessing.pool import ThreadPool
Kelas ThreadPool membungkus kelas Proses tiruan yang menjalankan utas Python secara dalaman. Pendekatan ini membenarkan API berbilang pemprosesan berasaskan benang, serupa dengan kelas Pool standard. Tetapi tidak seperti proses pekerja, benang berkongsi memori, berpotensi mengurangkan overhed.
Penggunaan ThreadPool berasaskan benang ini mencerminkan Pool standard. Sebagai contoh, untuk menyelaraskan operasi peta menggunakan benang:
def long_running_func(p): c_func_no_gil(p) pool = ThreadPool(4) xs = pool.map(long_running_func, range(100))
Perhatikan bahawa dalam senario ini, GIL tidak menjadi kebimbangan kerana fungsi asas melepaskannya sebelum melaksanakan operasi terikat IO. Jadi, untuk tugas intensif IO, ThreadPool boleh memberikan peningkatan prestasi yang ketara sambil mengelakkan overhed mencipta dan mengurus proses.
Atas ialah kandungan terperinci Adakah Terdapat Setara Berasaskan Benang dengan Kolam Berbilang Pemprosesan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!