Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengendalikan Gangguan Papan Kekunci dalam Kolam Berbilang Pemprosesan Python?
Dalam modul berbilang pemprosesan Python, kelas Pool menyediakan cara yang mudah untuk mengagihkan tugas merentasi pelbagai proses. Walau bagaimanapun, pengendalian acara KeyboardInterrupt dalam Pools boleh menjadi mencabar, seperti yang ditunjukkan oleh coretan kod:
<code class="python">from multiprocessing import Pool from time import sleep from sys import exit def slowly_square(i): sleep(1) return i*i def go(): pool = Pool(8) try: results = pool.map(slowly_square, range(40)) except KeyboardInterrupt: # **** THIS PART NEVER EXECUTES. **** pool.terminate() print "You cancelled the program!" sys.exit(1) print "\nFinally, here are the results: ", results if __name__ == "__main__": go()</code>
Apabila menjalankan kod ini, menekan Ctrl C tidak akan mencetuskan proses pembersihan, meninggalkan subproses berjalan tanpa had. Untuk menangani isu ini, pertimbangkan penyelesaian berikut:
Tingkah laku yang diperhatikan dalam kod adalah akibat daripada pepijat Python. KeyboardInterrupt tidak dihantar apabila menunggu syarat dalam threading.Condition.wait(). Memandangkan Pool.map() menggunakan syarat tunggu secara dalaman, gangguan tidak pernah diterima.
Penyelesaian ialah menggunakan Pool.map_async(), yang membenarkan penetapan tamat masa. Dengan menetapkan tamat masa yang cukup lama (mis., 9999999), kami boleh memastikan bahawa gangguan akan dicetuskan dalam masa yang munasabah.
Oleh itu, gantikan:
<code class="python"> results = pool.map(slowly_square, range(40))</code>
dengan:
<code class="python"> results = pool.map_async(slowly_square, range(40)).get(9999999)</code>
Penyelesaian ini menyediakan cara untuk mengendalikan acara KeyboardInterrupt dengan anggun dalam Pools berbilang pemprosesan, membenarkan penamatan semua subproses apabila pengguna membatalkan program.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Gangguan Papan Kekunci dalam Kolam Berbilang Pemprosesan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!