Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana Mengendalikan Isyarat SIGTERM dengan Anggun dalam Daemon Python?

Bagaimana Mengendalikan Isyarat SIGTERM dengan Anggun dalam Daemon Python?

Patricia Arquette
Patricia Arquetteasal
2024-11-15 15:56:03507semak imbas

How to Gracefully Handle SIGTERM Signals in Python Daemons?

Pengendalian Isyarat SIGTERM yang Anggun

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.

Pernyataan Masalah

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.

Menggunakan signal.signal()

Percubaan untuk mengendalikan peristiwa isyarat menggunakan signal.signal( isyarat.SIGTERM, pengendali) juga boleh mengganggu pelaksanaan semasa dan mengalihkan kawalan kepada pengendali.

Penyelesaian: Benang Terpisah untuk Pengendalian Isyarat

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.

Pelaksanaan

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 :)")

Faedah

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!

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