Dalam konteks mengurus proses daemon dalam Python, pengendalian isyarat SIGTERM dengan anggun adalah penting untuk memastikan penutupan yang teratur. Apabila isyarat SIGTERM diterima, gelagat lalai adalah agar atur cara ditamatkan serta-merta, yang berpotensi mengganggu operasi kritikal.
Untuk mengelakkan penamatan mengejut, adalah penting untuk mengendalikan isyarat SIGTERM dengan sewajarnya. Satu pendekatan melibatkan penggunaan isyarat.fungsi isyarat untuk mendaftar pengendali bagi isyarat. Walau bagaimanapun, pengendali ini masih akan mengganggu aliran pelaksanaan semasa dan mengambil kawalan.
Untuk pengendalian isyarat yang lebih halus, pertimbangkan untuk menggunakan benang atau proses yang berasingan untuk mengurus isyarat. Ini mengasingkan proses pengendalian daripada pelaksanaan utama, membenarkan atur cara meneruskan operasinya semasa isyarat dikendalikan secara tidak segerak.
Satu teknik biasa melibatkan mencipta bendera (cth., shutdown_flag) yang ditetapkan kepada Benar apabila SIGTERM pengendali dicetuskan. Gelung utama boleh menyemak bendera secara berkala untuk menamatkan proses dengan anggun apabila shutdown_flag ditetapkan.
Di bawah ialah contoh yang menunjukkan cara melaksanakan penyelesaian bersih menggunakan kelas:
import signal import time class GracefulKiller: kill_now = False # Flag to indicate termination def __init__(self): # Register SIGTERM and SIGINT handlers to set kill_now signal.signal(signal.SIGINT, self.exit_gracefully) signal.signal(signal.SIGTERM, self.exit_gracefully) def exit_gracefully(self, signum, frame): self.kill_now = True if __name__ == '__main__': killer = GracefulKiller() # Main loop that continues until kill_now is set to True while not killer.kill_now: time.sleep(1) print("Doing something in a loop...") print("End of the program. I was killed gracefully :)")
Skrip ini mencipta kelas GracefulKiller yang mengendalikan isyarat SIGTERM dan SIGINT. Apabila salah satu isyarat diterima, bendera kill_now ditetapkan kepada Benar. Gelung utama menyemak bendera ini secara berkala dan ditamatkan dengan anggun apabila kill_now menjadi Benar.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengendalikan isyarat SIGTERM dengan baik dalam Python untuk penamatan proses yang lancar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!