python - 无法使用线程在后台运行 python http 服务器
问题描述
我正在尝试使用线程在后台运行 python http 服务器。我遇到了几个执行以下操作的参考:
import threading
import http.server
import socket
from http.server import HTTPServer, SimpleHTTPRequestHandler
debug = True
server = http.server.ThreadingHTTPServer((socket.gethostname(), 6666), SimpleHTTPRequestHandler)
if debug:
print("Starting Server in background")
thread = threading.Thread(target = server.serve_forever)
thread.daemon = True
thread.start()
else:
print("Starting Server")
print('Starting server at http://{}:{}'.format(socket.gethostname(), 6666))
server.serve_forever()
当 thread.daemon 设置为True时,程序将在不启动服务器的情况下完成(端口 6666 上没有运行)。当我将 thread.daemon 设置为False时,它会在前台启动服务器并阻止终端,直到我手动将其杀死。
关于如何使这项工作的任何想法?
解决方案
在这两种情况下,服务器都是在后台启动的,在单独的线程中。这意味着thread.start()
启动服务器,python 继续执行主线程中的其余代码。
但是,您的程序中似乎没有其他内容可以执行。Python 到达文件末尾,主线程完成。
操作系统要求在进程完成之前完成所有非守护线程。当thread.daemon
设置为False
操作系统等待直到服务器线程退出(这永远不会发生,serve_forever
顾名思义)。当它是True
在主线程完成后立即关闭进程。
将您想要异步执行的任何代码放在之后thread.start()
就完成了!
推荐阅读
- flutter - initState 没有被调用
- python-3.x - 如何使用 Python/XPATH 获取类属性的内容?
- reactjs - 在重定向时保留状态,没有 redux 或 react-router
- python - 在 Python 中重新启动脚本
- powershell - 将 Context 参数中的值连接到 Select-String 输出中的 Line 属性
- reactjs - 通过axios过滤数组得到结果
- python - 替换熊猫列的非数字内容
- javascript - 如何在没有 querySelector(或 Reactjs 不鼓励的任何 DOM API)和 refs 的情况下访问 Reactjs 中深度嵌套的 DOM 节点?
- node.js - 适用于 Nodejs V8.3 或更高版本的 Yocto 配方
- php - org.json.JSONObject:值
我正在尝试将数据插入远程 mysql 数据库。我遇到的问题是解析位于远程服务器中的 php 文件。我总是得到这个 java.lang.String 类型的值 php 无法转换为 JSONObject 的错误。
这是我的php代码:
&