uvicorn本地开发fastapi时启用多worker模式
uvicorn在本地启动开发的fastapi程序时,想试试看多worker模式,发现其在启动的时候有一行提示: $uvicornmain:app--host=10.118.11.26--port=8000--workers=3--reload WARNING:"workers"flagisignoredwhenreloadingisenabled. 即当开启了reload热加载模式时,workers配置将会被忽略。所以在本地开发时如果想体验多worker模式,就不要使用--reload。这是一个很小的点,但是如果没有注意到这项提示,并且启动后去查看进程发现怎么操作都没有按预期实现多进程时,会很崩溃,...[>>…]
关于tiangolo/uvicorn-gunicorn-docker镜像搭建的服务gunicorn.conf日志配置问题
目前看,使用tiangolo/uvicorn-gunicorn-docker镜像搭建的服务端,配置文件gunicorn.conf中的threads和worker_class配置根本不会生效,其它还有access_log_format等。见https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker这里面的gunicorn配置介绍,都没有这些选项。如何调整tiangolo/uvicorn-gunicorn-docker镜像搭建的服务端的日志输出,即gunicorn_access.log中的日志问题,如在开始添加时间值。 #gunicorn_access.log中以下三项配置均不生效 threads=1 worker_class='sync' a...[>>…]
Python Mysql程序报错:BrokenPipeError: [Errno 32] Broken pipe
检查python服务端的程序,发现存在错误日志,内容大致如下: python3.11/site-packages/pymysql/connections.py",line756, self._sock.sendall(data) BrokenPipeError:[Errno32]Brokenpipe Duringhandlingoftheaboveexception,anotherexceptionoccurred: 查看错误发生的地方,是在对mysql连接进行拼之后的关闭调用方法中报错。ifnotconnection.ping(False):connection.close() BrokenPipeError:[Errno32]Brokenpipe主要发生在父进程向子进程...[>>…]
tiangolo/uvicorn-gunicorn-fastapi中gunicorn_conf.py配置中的access_log_format无效
使用tiangolo/uvicorn-gunicorn-fastapi搭建的Python服务端程序框架,按照gunicorn的日志配置规则,其相关的常使用参数有4个,分别是accesslog,access_log_format,errorlog,loglevel。在配置文件gunicorn_conf.py中添加了如下的日志配置,但根本不生效。 #gunicorn访问日志配置 accesslog='/var/logs/gunicorn.access.log' access_log_format='%(h)s%(l)s%(u)s%(t)s' 我确定我添加的配置文件在gunicorn的启动命令中使用-c进行了加载,而且文件中配置的workers配...[>>…]
使用python开发的压测工具locust经验整理
压测工具有很多,以前也接触过不少,今天整理了一下新接触的locust工具。Locust是一个开源负载测试工具。可以定义用户行为,也可以仿真百万个用户。Locust是非常简单易用,分布式,用户负载测试工具。Locust是完全基于时间的,因此单个机器可以支持几千个并发用户。相比其他许多事件驱动的应用,Locust不使用回调,而是使用轻量级的处理方式gevent。Gevent是一个基于greenlet的Python的并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效。 &...[>>…]
Fastapi框架开发的python 后台API服务程序报错AttributeError: 'NoneType' object has no attribute 'read'
对一套pythonFastapi框架开发的python后台API服务进行压测,在SQL执行的python程序中出现了很多的报错。如下:AttributeError:'NoneType'objecthasnoattribute'read'AttributeError:'NoneType'objecthasnoattribute'settimeout'AttributeError:'NoneType'objecthasnoattribute'sendall'struct.error:unpack_fromrequiresabufferofatleast8 都是在site-packagespymysqlconnections.py文件中遇到的问题,经过几天的排查、思考最后发现是用户的请求进到python程序...[>>…]
使用Python中的passlib模块实现Django框架中的用户账号密码处理
有一套服务端系统使用的是Django框架开发的,其账号密码也使用的是Django框架原生的账号体系处理,然后我需要在另一套非Django框架的程序中去校验用户的账号密码,在Django中使用的是PBKDF2(Password-BasedKeyDerivationFunction2)加密算法,使用的时候直接调用。 fromdjango.contrib.auth.hashersimportmake_password password='123456' #通过原始密码串直接获得散列密码串 hashed_password=make_password(password) 开始我在原生的python代码块中使用pbkdf2_sha...[>>…]
python连接Amazon S3服务并取临时预授权URL:The AWS Access Key Id you provided does not exist in our records.
在python中要连接AmazonS3,需先使用pip安装boto3模块,boto3是一个基于s3协议实现了客户端API的PythonSDK,用于在程序中调用对象存储服务进行文件操作。 #pip安装boto3 pipinstallboto3 #源码安装boto3 gitclonehttps://github.com/boto/boto3.git&&cdboto3&&sudopythonsetup.pyinstall 连接amazonS3需要先在amazonS3的管理控制台中生成aws_access_key_id和aws_secret_access_key,这里要注意在创建的顺序方法,需要先在IAM中创建一个新的组,并在组下创建用户。然后在IAM->用户->新创建的用...[>>…]
Python字典和列表的常用函数和方法列表
A.字典内置函数列表1len(dict)计算字典元素个数,即键的总数。2str(dict)输出字典,可以打印的字符串表示。3type(variable)返回输入的变量类型,如果变量是字典就返回字典类型。B.字典常用的方法列表:1dict.clear()删除字典内所有元素2dict.copy()返回一个字典的浅复制3dict.fromkeys()创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值4dict.get(key,default=None)返回指定键的值,如果键不在字典中返回default设置的默认值5keyindict如果键在字典dict里返回true,否则返回false6dict.items...[>>…]
python中向https类的url发送post请求
python向https地址发送post请求,需要注意以下几点。1.一般都是向主机发出未经验证的HTTPS请求,所以需要关闭校验verify=False, response=requests.post(url,data=params,verify=False)2.即使使用了verify=False,但在执行时会发现取不到数据,只看到有一个Warning内容 警告示例:urllib3connectionpool.py:1045:InsecureRequestWarning:UnverifiedHTTPSrequestisbeingmadetohost..,因为requests默认开启了这个Warning警告内容,可在执行post...[>>…]