Python ialah bahasa pengaturcaraan yang sangat popular, terutamanya digunakan secara meluas dalam pengaturcaraan rangkaian. Pengaturcaraan sisi pelayan juga merupakan salah satu daripadanya. Dalam pengaturcaraan bahagian pelayan, proses daemon adalah konsep biasa. Artikel ini memperkenalkan cara untuk melaksanakan proses daemon dalam pengaturcaraan pelayan Python.
Apakah itu proses daemon?
Dalam proses menjalankan program sebelah pelayan, untuk memastikan operasi program yang stabil dalam jangka panjang, kita perlu menukarnya menjadi proses daemon. Daemon ialah proses yang berjalan secara berterusan di latar belakang Proses ini tidak menduduki konsol atau sesi log masuk dan boleh dimulakan semula secara automatik untuk memastikan program berjalan untuk masa yang lama.
Dalam sistem Linux, proses daemon biasanya dilaksanakan melalui panggilan sistem fork(). Proses pelaksanaan khusus adalah seperti berikut:
Dalam Python, kita boleh mencipta proses daemon dengan mengatasi fungsi run() proses induk. Pelaksanaan khusus adalah seperti berikut:
import os import sys class Daemon: def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): self.stdin = stdin self.stdout = stdout self.stderr = stderr self.pidfile = pidfile def daemonize(self): if os.path.exists(self.pidfile): raise RuntimeError('PID file %s already exists' % self.pidfile) # First fork (detaches from parent) try: if os.fork() > 0: sys.exit(0) except OSError as e: raise RuntimeError('fork #1 failed: %d (%s)' % (e.errno, e.strerror)) os.chdir('/') os.umask(0) os.setsid() # Second fork (relinquish session leadership) try: if os.fork() > 0: sys.exit(0) except OSError as e: raise RuntimeError('fork #2 failed: %d (%s)' % (e.errno, e.strerror)) # Flush I/O buffers sys.stdout.flush() sys.stderr.flush() # Redirect standard file descriptors with open(self.stdin, 'rb', 0) as f: os.dup2(f.fileno(), sys.stdin.fileno()) with open(self.stdout, 'ab', 0) as f: os.dup2(f.fileno(), sys.stdout.fileno()) with open(self.stderr, 'ab', 0) as f: os.dup2(f.fileno(), sys.stderr.fileno()) # Write pidfile with open(self.pidfile, 'w') as f: print(os.getpid(), file=f) def start(self): self.daemonize() self.run() def stop(self): if os.path.exists(self.pidfile): with open(self.pidfile) as f: os.kill(int(f.read()), signal.SIGTERM) os.remove(self.pidfile) def restart(self): self.stop() self.start() def run(self): raise NotImplementedError
Dalam kod di atas, kami mencipta proses daemon Python dengan melaksanakan kelas bernama Daemon. Antaranya, kaedah self.daemonize() melaksanakan proses penciptaan proses daemon, kaedah self.start() memulakan proses daemon, kaedah self.stop() menghentikan proses daemon, kaedah self.restart() memulakan semula proses daemon, dan kaedah run() perlu ditulis semula mengikut situasi sebenar.
Apabila menggunakan Python untuk melaksanakan proses daemon, anda perlu memberi perhatian kepada isu berikut:
Ringkasan
Artikel ini memperkenalkan cara untuk melaksanakan proses daemon dalam pengaturcaraan pelayan Python. Mencipta daemon Python agak mudah, tetapi kestabilan dan pengendalian ralatnya memerlukan lebih perhatian. Melalui pengenalan artikel ini, pembaca boleh mempelajari cara menggunakan Python untuk mencipta proses daemon yang stabil dan boleh dipercayai untuk memastikan operasi stabil jangka panjang program sisi pelayan Python.
Atas ialah kandungan terperinci Pengaturcaraan pelayan Python: bagaimana daemon dilaksanakan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!