ฉันจะจัดการกับเหตุการณ์ KeyboardInterrupt ด้วยพูลการประมวลผลหลายตัวของ 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()
เมื่อเรียกใช้โค้ดด้านบนค่าKeyboardInterrupt
จะเพิ่มขึ้นเมื่อฉันกด^C
แต่กระบวนการก็ค้างที่จุดนั้นและฉันต้องฆ่ามันจากภายนอก
ฉันต้องการที่จะกด^C
ได้ตลอดเวลาและทำให้กระบวนการทั้งหมดออกอย่างสง่างาม