Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengendalikan Gangguan Papan Kekunci dalam Kolam Pemprosesan Berbilang dengan Python?

Bagaimana untuk Mengendalikan Gangguan Papan Kekunci dalam Kolam Pemprosesan Berbilang dengan Python?

DDD
DDDasal
2024-10-22 16:35:02893semak imbas

How to Handle Keyboard Interruptions in Multiprocessing Pools with Python?

Pengendalian Gangguan Papan Kekunci dalam Kumpulan berbilang pemprosesan dengan Python

Mengendalikan Gangguan Papan Kekunci adalah penting untuk mengurus proses selari dengan berkesan. Pustaka multiprocessing menyediakan cara untuk mencipta kumpulan proses pekerja yang boleh melaksanakan tugas secara serentak. Walau bagaimanapun, isu timbul apabila KeyboardInterrupt dimulakan semasa pelaksanaan proses ini.

Masalah:

Dalam kod Python yang diberikan, Pool dibuat dan percubaan dibuat untuk mengendalikan Gangguan Papan Kekunci menggunakan blok cuba kecuali. Walau bagaimanapun, kod yang sepadan dalam blok except tidak pernah dilaksanakan, meninggalkan program tergantung.

<code class="python">try:
    results = pool.map(slowly_square, range(40))
except KeyboardInterrupt:
    pool.terminate()
    print("You cancelled the program!")
    sys.exit(1)</code>

Punca:

Masalah ini disebabkan oleh pepijat dalam Python di mana Gangguan Papan Kekunci tidak dihantar apabila menunggu syarat dalam threading.Condition.wait(). Dalam pustaka multiprocessing, Pool menggunakan pembolehubah keadaan untuk menunggu keputusan operasi map(). Apabila Gangguan Papan Kekunci berlaku, pembolehubah keadaan wait() tidak kembali, sekali gus menghalang gangguan daripada dikendalikan.

Penyelesaian:

Untuk menyelesaikan isu ini, penyelesaian adalah untuk menentukan tamat masa semasa menunggu keputusan. Ini boleh dicapai dengan menggantikan panggilan map() dengan map_async().get(timeout), di mana tamat masa ditetapkan kepada nilai yang besar.

<code class="python">results = pool.map_async(slowly_square, range(40)).get(9999999)</code>

Dengan menentukan tamat masa, pembolehubah syarat wait() akan kembali walaupun KeyboardInterrupt belum diproses. Ini membolehkan blok kecuali untuk dilaksanakan, membolehkan penamatan kumpulan dan pengendalian gangguan yang anggun.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Gangguan Papan Kekunci dalam Kolam Pemprosesan Berbilang dengan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn