Cara Menyamakan Gelung Python untuk Prestasi Berbilang Teras
Soalan:
Untuk CPU -gelung Python terikat, bagaimana kita boleh menyelaraskan operasi dengan berkesan untuk memanfaatkan kuasa berbilang teras?
Jawapan:
Jurubahasa Python menguatkuasakan Global Interpreter Lock (GIL), melarang pelaksanaan serentak kod Python oleh urutan penterjemah yang sama. Oleh itu, untuk tugasan terikat CPU, menggunakan berbilang proses dan bukannya benang adalah lebih cekap.
Persejajaran dengan Kumpulan Proses:
Python menyediakan dua kaedah mudah untuk mencipta kumpulan proses :
pool = multiprocessing.Pool(4) out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
Pendekatan ini menggunakan modul berbilang pemprosesan dan membolehkan kawalan terus ke atas kiraan benang. Walau bagaimanapun, ia mungkin terdedah kepada isu dalam penterjemah interaktif.
with concurrent.futures.ProcessPoolExecutor() as pool: out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
Kaedah ini menggunakan serentak .futures.ProcessPoolExecutor dan beroperasi di atas modul multiprocessing, menyediakan yang serupa kefungsian.
Kedua-dua kaedah mencapai kesejajaran dengan mengagihkan lelaran gelung kepada proses yang berasingan, meningkatkan prestasi dengan ketara untuk pengiraan terikat CPU.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menyelaraskan Gelung Python Terikat CPU untuk Prestasi Berbilang Teras?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!