Apabila bekerja dengan Kolam berbilang pemprosesan Python, pengendalian acara KeyboardInterrupt tidak selalunya mudah. Dalam artikel ini, kami akan meneroka cara mengendalikan gangguan tersebut dan memastikan proses keluar dengan baik.
Sampel kod yang disediakan menunjukkan cabaran. Walaupun mempunyai blok tangkapan untuk KeyboardInterrupt, ia tidak dilaksanakan apabila kawalan-C ditekan. Sebaliknya, atur cara digantung sehingga ia ditamatkan secara luaran.
Punca isu ini terletak pada pepijat Python yang berkaitan dengan menyekat pada syarat dalam threading.Condition.wait(). Dalam konteks ini, KeyboardInterrupt tidak pernah dihantar. Akibatnya, ia menghalang gangguan daripada dikendalikan dalam Pool.
Satu penyelesaian kepada masalah ini ialah dengan menentukan tamat masa semasa menunggu keputusan. Kaedah map_async() dengan parameter tamat masa boleh digunakan dan bukannya map(). Pendekatan ini membolehkan KeyboardInterrupt dikenali dan diproses:
<code class="python">results = pool.map_async(slowly_square, range(40)).get(9999999)</code>
Dengan menetapkan nilai tamat masa yang besar, pada asasnya kami memberitahu Pool untuk terus menunggu keputusan sehingga diganggu oleh pengguna.
Adalah penting untuk ambil perhatian bahawa terdapat beberapa batasan untuk penyelesaian ini. Jika tamat masa tamat sebelum semua tugasan selesai, keputusan yang tidak lengkap akan dibuang. Oleh itu, adalah penting untuk memilih nilai tamat masa yang sesuai yang mengimbangi responsif dengan risiko hasil yang tidak lengkap.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Gangguan Papan Kekunci dengan Anggun dalam Kolam Pemprosesan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!