修改Fastapi框架Websocket官方示例实现多房间多人即时通迅
Fastapi框架Websocket官方示例:https://fastapi.tiangolo.com/advanced/websockets/中有一个示例实现多个用户进行即时沟通,但这个示例只能实现多个用户在一起沟通,而不能实现多个用户随便分组随便沟通,因此对这个示例进行了修改实现了多房间多用户的沟通场景。修改的部分以及修改后的代码如下: fromtypingimportList fromfastapiimportFastAPI,WebSocket,WebSocketDisconnect fromfastapi.responsesimportHTMLResponse app=FastAPI() html=""" <!DOCTYPEhtml> <html> <...[>>…]
Fastapi框架使用Websocket实现即时通迅功能
WebSocket用于在Web浏览器和服务器之间进行任意的双向数据传输的一种技术,是HTML5的技术之一,放到现在也并不是一个多新鲜的东西,不过在没有WebSocket之前,要实现从服务器推消息给客户端确实觉得很别扭,比如使用轮询或者长连接的方式,这些方式都会增加客户端和服务端很多负担,都是一些间接的实现方案,但均不理想。而WebSocket协议则是一个真正实现全双工通迅的东西,其也是基于TCP实现,也包含初始的握手过程,但初次握手后可以进行多次数据双向传输过程。WebSocket接口的内容可以分...[>>…]
Python的Fastapi框架使用Websocket时Unsupported upgrade request
Python的Fastapi框架中可以方便地使用Websocket,见官方文档:https://fastapi.tiangolo.com/advanced/websockets/但在使用websocket的时候碰到了报错,WARNING: Unsupportedupgraderequest.即当前的fastapi环境中并没有支持websocket的upgrade请求,客户端中的连接ws协议的js代码中也报错:handshake:Unexpectedresponsecode:400。 我的运行环境是uvicorn,是通过pipinstalluvicorn来安装,在之前开发API接口的时候一切正常,但在使用websockets时遇到了这个错误...[>>…]
python中的异常Exception捕获以及python2与python3的区别
Python开发的时候经常会碰到两类错误,语法错误SyntaxError:invalidsyntax和异常Exception。在语法没有问题的前提下在运行期检测到的错误被称为异常,大多数的异常都不会被程序处理,都以错误信息的形式展现出来,且异常以不同的类型出现,这些类型都作为信息的一部分打印出来,如可能报的除数为0的错误ZeroDivisionError;比如使用assert(断言)用于判断一个表达式当为false的时候会触发抛出一个AssertionError异常等等。 异常捕捉可以使用try/except语句,先执行t...[>>…]
python操作Excel导入:xlrd.biffh.XLRDError: Excel xlsx file; not supported
使用python在本地环境进行操作Excel导入正常通过,但放到服务器后也同样安装了xlrd模块,但在执行导入时报错xlrd.biffh.XLRDError:Excelxlsxfile;notsupported,如下: File"/usr/local/lib/python3.8/site-packages/xlrd/__init__.py",line170,inopen_workbook raiseXLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+';notsupported') xlrd.biffh.XLRDError:Excelxlsxfile;notsupported 后来发现xlrd扩展版本有变化同,xlrd官网:https://pypi.org/project/xlrd/...[>>…]
python调试:使用装饰器来统计函数被调用次数及格式化dict
喜欢调试的时候显示数据并显示一些其它的信息,比如区分是哪次调用的调试信息,比如友好的显示dict等相对复杂的数据类型,所以这里涉及到两个方面。一是统计函数被调用次数;二是格式化展示dict数据。 在类中对一个函数的调用次数进行统计比较方便,直接定义一个类属性来计数即可,但对于一个普通函数这样的方法就不能实现了,于是我们可以通过装饰器来实现。 装饰器(Decorators)是Python的一个重要功能,它是一个可以修改其他函数的功能的函...[>>…]
git:LF will be replaced by CRLF和pytest: --cov NTERNALERROR PermissionError
1.gitwarning:LFwillbereplacedbyCRLFin***file 偶然gitadd在进行代码提交的时候碰到警告warning:LFwillbereplacedbyCRLFin***file,原因是编辑的代码内容中存在符号转义问题,windows中的换行符为CRLF,而在linux下的换行符为LF,所以在执行add.时,git发现改动文件中引入了LF会发出警告你哪些文件不是纯CRLF文件,但git不会自动修改工作区的文件,而是对暂存区进行修改。我们也可不做任何处理,它只是会提示,对代码提交无影响。 $gitadd. warning:LFwillbereplacedbyCRLFin***file Thefile...[>>…]
python的fabric模块实现run运行错误以及run执行shell的结果捕获
在jenkins发布代码前有必要进行代码自动化测试,而最终代码是否需要发布就需要依据自动化测试的结果来处理,jenkins中使用fabric模块调用远程服务器执行shell脚本,比如在方法中调用远程服务器执行docker容器中的代码自动测试,我们期望对run执行的shell脚本进行判断,目标实现逻辑如下: #取得shell执行结果 result=run("dockerexec-itcontainpytest/app/--cov") #根据结果进行处理 ifresult=="Ok": print("测试成功通过,继续发布") else: print("测试失败,终止发布")  ...[>>…]
常见的WSGI服务器Gunicorn、uWSGI了解
常见的WSGI服务器有: 1.Gunicorn:Gunicorn是使用Python实现的WSGI服务器,提供http服务,并在worker工作方式上提供了多种选择,其默认的work_class是sync,即同步阻塞的网络模型,性能不佳。其它的工作方式还有eventlet、gevent(利用python协程实现)、tornado(利用Tornado框架实现)、gthread(采用线程工作模式)、gaiohttp(利用aiohttp库实现异步I/O,支持websocket)。在多进程模式中除了使用多CPU的同时,还可以使用协程来提供并发支撑。和nginx类似,Gunicorn也是一个...[>>…]
关于WSGI、ASGI协议和gunicorn、uvicorn
关于WSGI和ASGI WSGI、ASGI是一种协议规范,也是一种Web服务器与后端应用之间的交流方式。同类型的东西我们能想到CGI公共网关接口CommonGatewayInterface/CGI,CGI是Web服务器运行时外部程序的规范,按CGI编写的程序可以扩展服务器功能、与浏览器进行交互、通过数据API与数据库服务器通信。 WSGI、ASGI则都是Python为了解决Web服务器端与客户端之间的通信问题而产生的,是为Python语言定义的Web服务器和Web应用程序或框架之间的通用协议。并且WSGI(PythonWebServerGate...[>>…]