gpt4 book ai didi

python - 守护 python 的 BaseHTTPServer

转载 作者:太空狗 更新时间:2023-10-29 18:27:06 26 4
gpt4 key购买 nike

我正在开发一个需要嵌入 HTTP 服务器的守护进程。我正在尝试使用 BaseHTTPServer 来完成它,当我在前台运行它时,它工作正常,但是当我尝试将守护进程 fork 到后台时,它停止工作。我的主应用程序继续工作,但 BaseHTTPServer 不工作。

我认为这与 BaseHTTPServer 将日志数据发送到 STDOUT 和 STDERR 这一事实有关。我正在将它们重定向到文件。这是代码片段:

# Start the HTTP Server
server = HTTPServer((config['HTTPServer']['listen'],config['HTTPServer']['port']),HTTPHandler)

# Fork our process to detach if not told to stay in foreground
if options.foreground is False:
try:
pid = os.fork()
if pid > 0:
logging.info('Parent process ending.')
sys.exit(0)
except OSError, e:
sys.stderr.write("Could not fork: %d (%s)\n" % (e.errno, e.strerror))
sys.exit(1)

# Second fork to put into daemon mode
try:
pid = os.fork()
if pid > 0:
# exit from second parent, print eventual PID before
print 'Daemon has started - PID # %d.' % pid
logging.info('Child forked as PID # %d' % pid)
sys.exit(0)
except OSError, e:
sys.stderr.write("Could not fork: %d (%s)\n" % (e.errno, e.strerror))
sys.exit(1)


logging.debug('After child fork')

# Detach from parent environment
os.chdir('/')
os.setsid()
os.umask(0)

# Close stdin
sys.stdin.close()

# Redirect stdout, stderr
sys.stdout = open('http_access.log', 'w')
sys.stderr = open('http_errors.log', 'w')

# Main Thread Object for Stats
threads = []

logging.debug('Kicking off threads')

while ...
lots of code here
...

server.serve_forever()

我是不是做错了什么,或者 BaseHTTPServer 是否以某种方式被阻止成为守护进程?

编辑:更新代码以演示额外的、之前缺失的代码流,并且 log.debug 显示在我 fork 的后台守护进程中,我在 fork 后点击代码。

最佳答案

经过一番谷歌搜索后,我 finally stumbled over this BaseHTTPServer documentation之后我得到了:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from SocketServer import ThreadingMixIn

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread."""

server = ThreadedHTTPServer((config['HTTPServer']['listen'],config['HTTPServer']['port']), HTTPHandler)
server.serve_forever()

这大部分是在我 fork 并最终解决了我的问题之后发生的。

关于python - 守护 python 的 BaseHTTPServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com