Mengendalikan SIGTERM untuk Penutupan Anggun
Dalam konteks aplikasi dunia sebenar, adalah penting untuk memastikan proses dapat mengendalikan isyarat penamatan dengan anggun untuk mengelakkan gangguan mendadak. Dalam Python, pengendalian SIGTERM (TERM) adalah keperluan biasa apabila menguruskan proses daemon.
Pertimbangkan contoh proses Daemon berikut:
def mainloop(): while True: # Important operations # ... # Sleep
Masalah:
Apabila proses Daemon menerima isyarat SIGTERM secara lalai, aliran pelaksanaan adalah terganggu serta-merta, membawa kepada penamatan proses tanpa melengkapkan operasi yang sedang berjalan.
Soalan:
Adakah mungkin untuk mengendalikan SIGTERM dengan anggun tanpa mengganggu aliran pelaksanaan semasa? Matlamatnya adalah untuk membenarkan proses menyelesaikan operasi semasa dan kemudian keluar dengan anggun dengan menetapkan bendera penutupan dalam urutan yang berasingan.
Penyelesaian:
Menggunakan Kelas Pembunuh Anggun:
Kami boleh memanfaatkan kelas GracefulKiller yang mudah untuk mengendalikan SIGTERM dengan 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("Performing operation...") print("Process exited gracefully.")
Dalam penyelesaian ini:
Atas ialah kandungan terperinci Bolehkah Proses Python Mengendalikan SIGTERM Dengan Anggun Tanpa Gangguan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!