分类 Python 中的文章

在python中,如何实现抽象类的效果?

我们都知道,在java中有接口(interface)的概念,类可以实现多个接口,但是必须要实现所有接口中的方法,但是在python 中并没有接口的概念,类可以通过多继承的方式继承自多个类,现在如果我们想要实现在java中的接口的效果,强制要求子类必须实现一些方法,该如何操作呢?

……

阅读全文

python 中的 __slot__ 的用法

在看sanic 源码时,发现在定义类的时候,会设置一个__slot__属性,由于之前没有用过个魔术变量,所以查了一下,这里记录一下该属性的作用。 我们知道,在python 的实例中,我们可以动态的给实例绑定属性与方法,像下面这样

……

阅读全文

python中Mixin混入类的用法

Mixin 在 python 中也不是什么新鲜的东西,只是一种编程思想的体现,利用其可以多继承的语言特点,从而达到一种灵活的编程方式。

最近在看sanic的源码,发现有很多Mixin的类,大概长成这个样子

……

阅读全文

gin 、sanic、flask 读取 redis 并发对比

最近想要看下go与python的性能到底有多少差异,不比不知道,差距还是蛮大的,为了方便实验,两个后台服务都访问相同的redis服务器, 简单的使用get 命令,获取一个值, 再通过json 格式返回

……

阅读全文

redis中报too many connections错误的解决

最近在对系统中某个接口进行压力测试的时候发现,有个redis的查询接口大量的报错,于是查看后台日志,发现是aioredis 报了Too many connections, 起初我认为是由于在进行压力测试,由于这个接口需要访问redis数据,同一时间来了大量的请求,所以会对redis服务器造成大量的请求,redis服务器抗不住返回了Too many connections 错误,但是经过排查不是这样的。

……

阅读全文

使用ORM与原始SQL的性能对比

最近使用号称 python web 框架中性能最为强悍的框架 sanic , 搭建了项目的基础环境与项目框架,但是在是否使用ORM 的时候犯了选择困难综合症了,对于一个追求性能的框架,在使用了 ORM 以后必定会对性能有些影响,但是影响究竟有多大呢? ORM 的存在也是有它的理由的, 那么它的优点能否消除它在性能上的损耗呢?

……

阅读全文

使用selenium 操作 electron 应用

近期的自动化测试项目中有个关于测试内部IM通信软件的需求,在了解到各个客户端的相应技术栈实现以后,在mac中的应用使用的是electron 技术,我们也对相应的技术进行调研,此文记录一下在关于electron应用的自动化测试。

……

阅读全文

Tornado整合socketio(一)

最近在做的项目中,需要将手机中的视频流或者音频流发送给服务端,再由服务端转发给浏览器端,起初我使用redis作为中转,将数据发到redis中,再由redis的发布订阅功能,整体架构如下

image-20210519225715299

主要是利用了redis的pub/sub功能,这种方案也没有什么问题,但是整体的性能瓶颈受redis的影响。

最近接触到socketio,发现这种需求可以使用它来实现,但是网上查找了一些资料,在python的使用中,主要还是flask-socketio与原生的应用上,由于目前项目使用Tornado来构建,所以用了几天时间将socketio与Tornado的融合使用。

本教程会分几篇来介绍,主要以下几个章节

  1. socketio介绍与脚手架的搭建
  2. 定义消息处理事件
  3. 命名空间的使用
  4. 消息的发布与响应
  5. room的使用
  6. 前端vue中使用socketio与后端通信
……

阅读全文

aiomysql与sqlalchemy的使用

之前一直使用tornado做项目,数据库一直使用mongo与redis居多,凭借其优异的异步特性工作的也很稳定高效,最近的项目需要使用 mysql ,由于之前在使用mongo与redis时所使用的moto与aioredis来异步的执行数据库操作,所以在网上查询了异步操作mysql的库, 本文记录一下异步操作中所遇到的问题与相应的解决方案。

……

阅读全文

python 中日志异步发送到远程服务器

在python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日志发送到远端,或者直接写入数据库,这种需求该如何实现呢?

……

阅读全文