Bagaimanakah saya boleh mengendalikan isyarat SIGTERM dengan baik dalam Python untuk penamatan proses yang lancar?

DDD
Lepaskan: 2024-11-15 19:52:02
asal
785 orang telah melayarinya

How can I gracefully handle SIGTERM signals in Python for smooth process termination?

Mengendalikan Isyarat SIGTERM untuk Penamatan Proses Anggun

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 :)")
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan