type
Post
status
Published
date
Jun 19, 2022
slug
python-1
summary
介绍几种python启动http server的几种方式
tags
Python
开发
category
技术分享
icon
password
Property
Jun 19, 2022 04:00 PM
原创
🤔 如果我们想启动一个http server
- 使用python我们可以怎么实现
内置的wsgiref、eventlet、httpd、nginx
📝实现http server
wsgiref
python内置的简单的wsgi(Python Web Server Gateway Interface)的实现
一次只能接收一个请求
# coding:utf-8 from wsgiref.simple_server import make_server import time def my_handler(environ, start_response): request_method = environ['REQUEST_METHOD'] if request_method == 'GET': if environ['PATH_INFO'] == "/": # 'QUERY_STRING': 'ha=1&oo=m' params = environ['QUERY_STRING'] if params: qurrys = params.split('&') qs = (q.split("=") for q in qurrys) print(list(qs)) token = "" if 'HTTP_X_AUTH_TOKEN' not in environ else environ['HTTP_X_AUTH_TOKEN'] # 第一个参数必须是至少两个用空格分开的内容 # 第二个参数是headers start_response("202 OK", [("content-type","text/json")]) time.sleep(100) return "Hello World %s" % token elif environ['PATH_INFO'] == "/hi": start_response("202 OK", [("content-type","text/plain")]) return "Hello 00" else: start_response("404 NOT FOUND", [("content-type","text/plain")]) return "404 NOT FOUND" elif request_method == "POST": start_response("202 OK", [("content-type","text/plain")]) return "Hello POST" else: start_response("404 NOT FOUND", [("content-type","text/plain")]) return "404 NOT FOUND" server = make_server("0.0.0.0", 8888, my_handler) # 单任务的,一个请求处理完才会处理另外一个请求 server.serve_forever()
eventlet
import eventlet eventlet.monkeypatch() from eventlet import wsgi def hello_world(env, start_response): print(env) start_response('200 OK', [('Content-Type', 'text/plain')]) return ['Hello, World!\r\n'] def run_service_world(listen_fd): try: # 内部使用绿色线程池来处理请求,一个请求遇到io操作时, # 另外一个请求到来,会处理该请求,不会被阻塞 wsgi.server(listen_fd, site=hello_world) except Exception as e: print("Error starting thread.") raise listen_fd1 = eventlet.listen(("", 8090)) run_service_world(listen_fd1)
🤗总结归纳
参考文章
致谢:
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~