Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana Mengendalikan Isyarat SIGTERM dengan Anggun dalam Daemon Python?
Dalam operasi daemonik, menamatkan proses menggunakan isyarat SIGTERM (TERM) boleh mengganggu tugas kritikal secara tiba-tiba. Untuk menangani perkara ini, mari kita terokai cara mengendalikan isyarat ini dengan anggun.
Memandangkan daemon ringkas yang ditulis dalam Python:
def mainloop(): while True: # Perform important jobs # Sleep
memperdayakannya menggunakan hentian mula -daemon menghantar SIGTERM (TERM) apabila ditamatkan. Jika isyarat diterima semasa operasi kritikal (cth., langkah #2), ia ditamatkan serta-merta.
Percubaan untuk mengendalikan peristiwa isyarat menggunakan signal.signal( isyarat.SIGTERM, pengendali) juga boleh mengganggu pelaksanaan semasa dan mengalihkan kawalan kepada pengendali.
Untuk mengelak daripada mengganggu pelaksanaan semasa, kita boleh mencipta benang yang diasingkan untuk mengendalikan isyarat TERM. Urutan ini boleh menetapkan shutdown_flag = Benar, membenarkan gelung utama keluar dengan anggun.
Berikut ialah penyelesaian berasaskan kelas untuk pengendalian isyarat yang anggun:
import signal import time class GracefulKiller: kill_now = False def __init__(self): 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() while not killer.kill_now: time.sleep(1) print("doing something in a loop ...") print("End of the program. I was killed gracefully :)")
Penyelesaian ini membolehkan daemon mengendalikan SIGTERM dengan anggun, memastikan operasi kritikal dapat diselesaikan sebelum penamatan. Ia juga menyediakan pelaksanaan yang bersih dan boleh diselenggara untuk mengendalikan isyarat dalam persekitaran berbilang benang.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Isyarat SIGTERM dengan Anggun dalam Daemon Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!