代码之家  ›  专栏  ›  技术社区  ›  Nick Bolton

如何实现一个简单的跨平台python守护进程?

  •  21
  • Nick Bolton  · 技术社区  · 14 年前

    我想让我的python程序在Windows或Unix上作为守护进程在后台运行。我看到了 python-daemon package 仅适用于Unix;是否有跨平台的替代方案?如果可能的话,我希望尽可能地简化代码。

    5 回复  |  直到 8 年前
        1
  •  4
  •   Adam Matan    14 年前
        2
  •  10
  •   Alex Martelli    14 年前
        3
  •  4
  •   Community taleinat    7 年前

    better explained elsewhere

    1. os.umask
    2. STDIN STDOUT STDERR DEVNULL
    3. SIGTERM

    finally: atexit __del__

    pythonw.exe windowless version of Python

    subprocess.Popen creationflags=subprocess.CREATE_NEW_PROCESS_GROUP

    import subprocess
    
    independent_process = subprocess.Popen(
        '/path/to/pythonw.exe /path/to/file.py',
        creationflags=subprocess.CREATE_NEW_PROCESS_GROUP
    )
    

    1. pickle
    2. tempfile

    daemoniker cross-platform API

    from daemoniker import Daemonizer
    
    with Daemonizer() as (is_setup, daemonizer):
        if is_setup:
            # This code is run before daemonization.
            do_things_here()
    
        # We need to explicitly pass resources to the daemon; other variables
        # may not be correct
        is_parent, my_arg1, my_arg2 = daemonizer(
            path_to_pid_file,
            my_arg1,
            my_arg2
        )
    
        if is_parent:
            # Run code in the parent after daemonization
            parent_only_code()
    
    # We are now daemonized, and the parent just exited.
    code_continues_here()
    
        5
  •  0
  •   zebrabox    14 年前