我有一个场景,需要首先用HTTP200响应服务器请求(由于时间限制),然后继续处理实际工作
我也不能使用线程、进程、任务、队列或任何其他方法来启动并行“进程”
我的方法是使用内置的“简单HTTP”服务器,我正在寻找一种方法来强制服务器用HTTP200响应,然后能够继续处理
当前代码将收到POST请求,并在3秒钟后打印其内容。我把一个占位符放在我想发送回复的地方
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
class MyWebServer(BaseHTTPRequestHandler):
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
self.send_response_only(200)
self.end_headers()
# force server to send request ???
time.sleep(3)
print(post_data)
def run(server_class=HTTPServer, handler_class=MyWebServer, port=8000):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print('Starting httpd...')
httpd.serve_forever()
if __name__ == "__main__":
run()
我想出了一个解决办法。您可以使用以下两个命令强制服务器发送200ok并继续处理:
这个答案来自于这样一个问题:SimpleHTTPRequestHandler close connection before returning from do_POST method
不过,这显然会关闭服务器使用的内部IO缓冲区,此后将无法处理任何其他请求
为了避免遇到异常,可以终止程序(对我有效)。不过,这只是一个解决方法,我仍在寻找一个允许服务器不断处理新请求的解决方案
相关问题 更多 >
编程相关推荐