【Python查漏补缺(七)】FastAPI网络编程
Python之Socket网编之前已经聊过了,这里不想过多赘述.复习的话可以跳转之前的学习界面
这里主要说一下遗忘的点
多线程的创建时机
服务端的套接字会在什么时候阻塞
服务端套接字.accept()接收到的是什么东西
Answer
回答一下上面的问题:
- 多线程应该放到死循环中创建,例如while True, 因为一台服务器要维护多个与客户端的连接,将
- sock, addr = server.accept()和threading.Thread(target=xxx, args=(socket_io,)).start()放到一起,每当出现新的客户端连接就创建一个线程
- 什么时候阻塞: 比如服务端创建了一个套接字: server = socket.socket()会在两个地方阻塞
- socket_io, address = server.accept()这里等待客户端连接会阻塞
- bytes_data = socket_io.recv(1024)等待客户端发送数据的时候也会阻塞
- socket_io, address = server.accept()会接收到的东西为
- 一个连接管道(set集合形式) socket_io
- <socket.socket fd=696, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 8000), raddr=(‘127.0.0.1’, 59815)>
- 一个客户端的ip地址(元组形式)和浏览器端口号 address
- <class ‘tuple’>: (‘127.0.0.1’, 59815)
Socket多线程
多线程和多进程不是第一次接触了, 实用场景也很多,这里和Socket结合实现一台服务器和多客户端通信.
- 导包进程(import multiprocessing)/线程(import threading)
- 创建线程 threading.Thread(target=x’x’x, args=(socket_io,)).start()
Demo
1 | import socket |
FastAPI框架
什么是FastAPI?
简单讲FastAPI就是把做web开发所需的相关代码全部简化, 我们不需要自己实现各种复杂的代码, 例如多任务,路由装饰器等等. 只需要调用FastAPI提供给我们的函数, 一调用就可以实现之前需要很多复杂代码才能实现的功能.
FastAPI的特点
- 性能快:高性能,可以和NodeJS和Go相提并论
- 快速开发:开发功能速度提高约200%至300%
- 更少的Bug:
- Fewer bugs: 减少40%开发人员容易引发的错误
- 直观:完美的编辑支持
- 简单: 易于使用和学习,减少阅读文档的时间
- 代码简洁:很大程度上减少代码重复。每个参数可以声明多个功能,减少bug的发生
- 标准化:基于并完全兼容API的开发标准:OpenAPI(以前称为Swagger)和JSON Schema
FastAPI安装
安装方式1:
- 安装fastapi
- pip install fastapi
- 如果用于生产,那么你还需要一个ASGI服务器,如Uvicorn或Hypercorn
- pip install uvicorn
- 安装fastapi
安装方式2 :
选择File->Settings->解释器(直接选择阿里镜像源/清华镜像源)
FastAPI使用
ImportError: cannot import name Deque
写完程序一跑,Python不讲码德给我报错了,欺负我这个Python3.6低版本的编译器是吧, 升级,给我升到3.8.
- 解释: 这个Deque的错误是由于FastAPI需要3.7以上的Python解释器,而我之前大学用的是3.6的,版本有点老了.
Demo
1 | mport uvicorn |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.