FastAPI使用基础-性能篇

img

一. 前言

在局域网内部署了一个 web/api 服务, 基于性能和websocket使用的考量, 选择了fastapi, 借此探讨一下fastapi为何fast的原因.

FastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.

Round 23 results - TechEmpower Framework Benchmarks

Web Framework Benchmark - Sharkbench

A 2024 benchmark of main Web API frameworks - Okami101 Blog

阅读全文 »

VBA高阶系列3: "原生"调用JavaScript脚本

img

一. 前言

对于爬虫有过较为深入了解的用户, 应该多少和JavaScript到过交道, 在爬虫的逆向很多时候都需要将目标页面的 js 文件存取到本地, 修改使之能够用于破解页面反爬. 通常这种脚本较为繁琐, 改成目标语言, 如python, 是相当麻烦, 虽然现在有ai的辅助, 可以将一些简单的js脚本转换为指定的语言, 但考虑到转换后的各种问题, 直接运行原脚本获取到需要的信息更为可靠和直接.

阅读全文 »

贝叶斯文本分类算法的JavaScript实现

一. 前言

img

img

( < 黑客与画家 >, Paul )

JavaScript(浏览器端)分词 | Lian (kyouichirou.github.io)这篇文章中提及js分词的实现. 本文则是js版本贝叶斯分类算法的实现, Kyouichirou/BiliBili_Optimizer: enjoy and control bilibili (github.com).

使用统计方法来实现垃圾内容过滤, 很早就想写的了, 但是由于在js端没有好的分词方案(), 一直没捣鼓, 直到发现原来js原生就支持分词, 这个想法马上付诸实现.

以下是对贝叶斯和文本分类算法的简单回顾, 逐步从基础推导出整个数学公式, 并根据python sklearnnative_bayes进行代码的修正, 给出了普通方式计算的代码.

由于需要在毫秒内实现, js脚本使用的分词方案是js原生分词api.

阅读全文 »

JavaScript进阶指南

一. 前言

img

[图: Copyright reserved by Mozilla]

JavaScript 的核心语言是 ECMAScript, 是一门由 ECMA TC39 委员会标准化的编程语言. " ECMAScript " 是语言标准的术语, 但" ECMAScript " 和" JavaScript " 是可以互换使用的.

个人相对青睐于JavaScript的语法结构和代码风格, 相对于Python.

阅读全文 »

MySQL使用指南

'''
    @author: HLA
    @github: https://github.com/Kyouichirou
    @version: 1.0
    @description: mysql基础与进阶; 基础, 查询, 配置, 管理.
    @license: MIT

    -- make thing better and simpler.
'''

一. 前言

MySQL更新到8.0之后, 很多内容发生较大的变化, 而搜索引擎/书籍查询到的大量信息还是基于5.x, 例如查询缓存这个机制在8.0就发生大的变化, 对于一些相对晦涩难懂的部分, 如日志, 锁, 事务, mvcc等更应注意, 这部分内容可查询到的信息相当混乱(陈旧, 错误), 大量混杂着各个时期MySQL的一些特性在其中, 遇到难以理解的部分应多查阅官方文档.

阅读全文 »

MySQL窗口函数(Window Function)详解

一. 前言

ppnYa7R.png

窗口函数(window function), 也称作OLAP, Online Analytical Processing,实时分析处理.

They can help boost query performance as an alternative to achieving the same result using more complex non-OLAP SQL code.

简而言之, 窗口函数大大强化了MySQL在数据分析上的能力, 通过窗口函数可以以相对简单的方式实现较为复杂的常态化数据输出, 例如经典的多层级汇总, topN问题, 多个区间之间得运算等.

以下内容, 先以简单的例子展示窗口函数的使用, 后使用相对复杂的内容来对窗口函数进行较深入的应用.

由于是在8.0后才增加的新特性, 搜索引擎/相关书籍提供的介绍较为简单和粗略, 相关参考主要以官方文档为主.

阅读全文 »

浏览器并发数量限制

一. 前言

事情是这样的, 为了测试fastapi的并发请求处理, 写了简单的前端脚本测试

{
    console.time('total');
    const urls = Array(4).fill('http://127.0.0.1:8000/test'),
    tasks = urls.map(url => fetch(url).then(r => r.json()).then(data => data));
    await Promise.allSettled(tasks);
    console.timeEnd('total');
}

http://127.0.0.1:8000/test, 在服务器端, 设置每个请求需要等待1秒.

阅读全文 »

MySQL Connector的问题

一. 前言

python中操作MySQL的包有很多, 以下是相对常见的.

库名称 扩展功能 适用场景
PyMySQL 基础连接池 通用中小型项目
mysql-connector 官方支持/事务管理 需要官方驱动保障的场景
mysqlclient 高性能 C 扩展 对性能要求极高的 OLTP 系统
SQLAlchemy ORM/多数据库支持 复杂业务逻辑/需要快速开发的项目
DBUtils 连接池管理 高并发数据库访问优化
阅读全文 »

Python和JavaScript的异步

一. 前言

一般而言, 对于并发, 这是很多人编程道路上一道比较难跨过的坎.

并发编程常见的问题:

  • 竞态(Race, 即不同的进程/线程访问同一个内存地址上的变量)
  • 代码复杂度的增加
  • 资源的管理
  • 调试困难

python中提供了三种并发方式:

  • 多进程(thread)
  • 多线程(process)
  • 协程(异步, async)
阅读全文 »