python守护进程 可以创建线程吗_从python守护进程启动线程的正确方法

我需要写一个简单的具有web界面的守护进程。在

其思想是使用python-daemon package并在一个线程内运行wsgiref.simple_server。在

Daemon可以使用以下代码正常工作:import daemon

import logging

import time

import signal

import threading

logfilename = '/var/log/testdaemon.log'

logger = logging.getLogger("DaemonLog")

logger.setLevel(logging.INFO)

formatter = logging.Formatter(

'%(asctime)s:%(levelname)s:%(message)s',

'%Y-%m-%d %H:%M:%S')

handler = logging.FileHandler(logfilename)

handler.setFormatter(formatter)

logger.addHandler(handler)

def initial_program_setup():

logger.info('daemon started')

def do_main_program():

while True:

time.sleep(1)

logger.info('another second passed')

def program_cleanup(signum, frame):

logger.info('daemon stops')

context.terminate(signum, frame)

def reload_program_config(signum, frame):

logger.info('reloading config')

context = daemon.DaemonContext()

context.signal_map = {

signal.SIGTERM: program_cleanup,

signal.SIGHUP: 'terminate',

signal.SIGUSR1: reload_program_config,

}

context.files_preserve = [handler.stream]

initial_program_setup()

with context:

do_main_program()

但是如果我像这样在initial_program_setup()中启动一个线程:

^{pr2}$

然后看起来守护进程在线程完成后退出。添加类似while True:

time.sleep(1)

to web_gui()(让线程永远运行,就像web服务器应该做的那样)会使情况变得更糟:甚至连web gui started行也不会出现在日志中。在

我的问题是:为什么这样不行?在守护进程中启动线程的正确方法是什么?在

也许有更好的方法可以通过web界面控制守护进程?有了这样的架构,我认为我应该为每个接口页面启动新线程,这很难扩展。在

谢谢。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值