메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

파이썬 데몬 모듈

데브카페

Python 데몬 프로그램 만들기

  • 데몬 프로세스(Daemon Process)는 백그라운드에서 계속 실행되는 프로세스
  • 주로 서버 프로그램이나 주기적인 작업 수행에 사용.
  • 우리가 주로 사용하는 웹서버 , ftp서버 등이 데몬 임.

데몬 프로세스 기본 원리

  1. 부모 프로세스로부터 독립되어야 한다.
  2. 백그라운드에서 실행되며 사용자와 직접 상호작용하지 않는다.
  3. 무한 루프로 주기적인 작업을 수행 함.

기본 데몬 프로세스 구현 (threading 사용)

  • daemon=True: 데몬 스레드로 설정. 메인 프로세스가 종료되면 데몬도 함께 종료.
  • 다음 코드는 5초마다 "Running in the background..."을 출력
import threading
import time

def background_task():
    while True:
        print("Running in the background...")
        time.sleep(5)  # 5초마다 실행

# 데몬 스레드 설정
daemon_thread = threading.Thread(target=background_task, daemon=True)
daemon_thread.start()

# 메인 프로세스가 종료되면 데몬도 종료됨
print("Main process is running...")
time.sleep(15)  # 15초 대기 후 메인 프로세스 종료

multiprocessing 모듈을 사용한 데몬 프로세스

  • p.daemon = True: 데몬 프로세스로 설정
  • 메인 프로세스가 종료되면 데몬 프로세스도 종료
from multiprocessing import Process
import time

def background_process():
    while True:
        print("Background process running...")
        time.sleep(3)

if __name__ == "__main__":
    p = Process(target=background_process)
    p.daemon = True  # 데몬 프로세스로 설정
    p.start()

    print("Main process running...")
    time.sleep(10)  # 메인 프로세스 10초 대기 후 종료

데몬 프로세스 서비스로 실행 (Linux 환경)

1) 단계 1: Python 스크립트 작성

my_daemon.py로 저장
import time
import os

def daemon_process():
    while True:
        with open("/tmp/daemon_log.txt", "a") as f:
            f.write(f"Daemon alive! PID: {os.getpid()}\n")
        time.sleep(10)

if __name__ == "__main__":
    daemon_process()

2) 단계 2: 서비스 파일 생성 (systemd)

/etc/systemd/system/my_daemon.service 파일을 생성하고 다음 내용을 작성
[Unit]
Description=My Python Daemon

[Service]
ExecStart=/usr/bin/python3 /path/to/my_daemon.py
Restart=always

[Install]
WantedBy=multi-user.target

3) 단계 3: 서비스 시작 및 상태 확인

sudo systemctl daemon-reload
sudo systemctl start my_daemon.service
sudo systemctl enable my_daemon.service  # 부팅 시 자동 시작

# 데몬 상태 확인
sudo systemctl status my_daemon.service


assignment 데몬 프로세스의 주의 사항
  1. 무한 루프와 예외 처리: 데몬은 무한 루프를 사용하므로 예외 처리를 꼭 추가해야 함.
  2. 서비스 종료 처리: 종료 신호(SIGTERM, SIGINT)를 받을 때 적절히 정리하는 코드가 필요 함.

Comments