Apabila cuba menguruskan peristiwa KeyboardInterrupt dalam Kolam berbilang pemprosesan Python, pengguna sering menghadapi masalah dengan proses tergantung dan memerlukan penamatan luaran. Artikel ini bertujuan untuk menangani masalah ini dan menyediakan penyelesaian yang boleh dilaksanakan.
Untuk menghuraikan cabaran yang diperkenalkan dalam soalan, kod yang disediakan berhasrat untuk menamatkan semua proses dalam Pool dengan anggun apabila menerima isyarat KeyboardInterrupt (dengan menekan ^ C). Walau bagaimanapun, seperti yang diperhatikan, KeyboardInterrupt mencetuskan jeda dalam pelaksanaan, menghalang prosedur penamatan yang dimaksudkan daripada berkuat kuasa.
Ini dikaitkan dengan pepijat Python yang menghalang penghantaran isyarat KeyboardInterrupt kepada threading.Condition.wait( ) syarat. Isu ini timbul kerana wait() tidak kembali melainkan tamat masa ditentukan. Akibatnya, Gangguan Papan Kekunci tidak diterima semasa proses ini.
Untuk mengatasi cabaran ini, penyelesaian yang dicadangkan melibatkan pengenalan had masa kepada keadaan tunggu():
<code class="python">results = pool.map_async(slowly_square, range(40)).get(9999999)</code>
Dengan memasukkan tamat masa ini, keadaan wait() terpaksa bertindak balas kepada isyarat KeyboardInterrupt dengan segera, membenarkan penamatan yang anggun bagi semua proses dalam Pool.
Oleh itu, pengubahsuaian ini menyediakan pendekatan yang mantap untuk menguruskan KeyboardInterrupts dalam Pool berbilang pemprosesan Python, membolehkan pengguna untuk menghentikan semua proses secara terkawal dengan berkesan pada bila-bila masa.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Gangguan Papan Kekunci dengan Anggun dalam Kolam Berbilang Pemprosesan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!