- 博客(308)
- 收藏
- 关注
原创 PostgreSQL 扩展安装
一、安装扩展无需本地操作,内置含有包可直接命令行安装CREATE EXTENSION "uuid-ossp";二、使用扩展CREATE TABLE user( id uuid DEFAULT uuid_generate_v4() NOT NULL PRIMARY KEY, data varchar(255), created_at timestamp with time z...
2020-04-21 17:31:22
2042
原创 PostgreSQL 基本安装总结
一、Mac 环境下的安装$ brew install postgresql1-1 查看当前环境版本$ pg_ctl -V 1-2 初始化数据库 在开始使用数据库前,需要在磁盘上初始化一个数据库存储区域,通常称之为一个数据库集簇(SQL标准使用的术语是目录集簇)。 一个数据库集簇是被一个运行数据库服务器的单一实例所管理的多个数据库的集合。 在初始化之后,一个数据库集簇将包...
2020-04-21 15:30:45
619
原创 RabbitMQ - 延迟队列
一、延迟队列1-1 简单介绍 延迟队列:存储延迟消息的队列 延迟消息:消息存入队列,等待一定时间后才交于消费者进行消费1-2 应用场景场景一 :订单系统 用户下单的30分钟确认支付,若超过30分钟,则该订单被列为超时订单处理。可以使用延时队列,在30分的时候处理这个订单的状态。关闭订单,并且退还库存。场景二:定时推送命令 手机远程遥控家里的智能设备在指定的时间进行工作。可以...
2020-04-07 13:38:26
568
原创 Go - Goroutine
一、Goroutine多个线程可以属于同一个进程并共享内存空间。因为多线程不需要创建新的虚拟内存空间,所以它们也不需要内存管理单元处理上下文的切换,线程之间的通信也正是基于共享的内存进行的,与重量级的进程相比,线程显得比较轻量。虽然线程比较轻量,但是在调度时也有比较大的额外开销。每个线程会都占用 1 兆以上的内存空间,在对线程进行切换时不止会消耗较多的内存,恢复寄存器中的内容还需要向操作系统申...
2020-03-30 09:11:03
339
原创 Go - Time
一、Time1-1 time.Format() - 时间格式化package mainimport ( "fmt" "time")func main() { now_time := time.Now() fmt.Println(now_time) //2020-03-09 14:48:06.238256 +0800 CST m=+0.000109584 //相当于Ymd ...
2020-03-30 09:10:21
283
原创 Go-Func,Struct,Interface
一、FunctionGo 语言中,函数的参数,无论是基本类型、结构体、指针,都会对传递的参数进行拷贝。但呈现方式并不都是值传递,原因是指针类型作为参数传递时,函数内部会对指针进行复制,会同事出现俩个指针指向原有的内存地址,所以 Go 语言中,传指针 == 传值传值:函数调用时会对参数进行拷贝,被调用方和调用方两者持有不相关的两份数据;传引用:函数调用时会传递参数的指针,被调用方和调用方两...
2020-03-30 09:09:34
638
原创 Go-Context
一、Context 简单介绍context.Context,是专门用来简化对于处理单个请求的多个 goroutine 之间与传递请求数据、同步信号、截止时间等相关操作,这些操作可能涉及多个 API 调用。1-1 应用场景举例e.g.1 有一个网络请求 Request,每个 Request 都需要开启一个 goroutine 做一些事情,这些goroutine又可能会开启其他的 gorou...
2020-03-30 09:09:09
168
原创 Go-Channel
一、Channel 设计原理Go 中使用 Channel 即通信的方式共享内存,避免了使用内存共享的方式通信,解决了需要限制同一时间能够读写变量的线程数量去解决线程冲突的问题。Go 语言虽然也能使用 共享内存+互斥锁 进行通信,但同时也提供了 通信顺序进程(Communicating sequential processes,CSP) 的并发模型。即,Goroutine -> Chann...
2020-03-30 09:08:31
125
原创 Go-同步原语
一、同步原语 - Sync这些基本原语提高了较为基础的同步功能,但是它们是一种相对原始的同步机制,在多数情况下,我们都应该使用抽象层级的更高的 Channel 实现同步。1-1 并发状态下的资源冲突由于引用传递,在并发状态下的数据资源获取无序,导致最终结果重复或者错误。package mainimport ( "fmt" "sync" "time")fun...
2020-03-30 09:08:00
551
原创 Go-关键词总结
一、For & For-Range循环的两种方式:for 、 for rangepackage mainimport "fmt"func main() { sum := 0 for i := 0; i < 10; i++ { sum += i } fmt.Println(sum) // 初始化语句和后置语句是可选的。 sum := 1 for ;...
2020-03-30 09:07:28
329
原创 Go - 数据结构
一、Array数组和切片是 Go 语言中最常见的数据结构。数组是由相同类型的元素的集合的数据结构,被分配一块的连续的内存用来保存数据,且可以通过其中存储的索引进行快速访问其存储地址。1-1 Array 的初始化Array 是定长的,一旦初始化后,无法改变其长度大小;而 Slice 是不定长的Array。array 的初始化有两种方式:1、显式指定长度 2、使用可变参数,由语言推断长度a...
2020-03-10 09:48:20
817
原创 Go - 编译过程总结
一、 语言类型:编译型语言代码在运行前,通过编译器生成二进制机器码,即,包含二进制机器码的文件才能再目标机器上运行。Go 语言编译器的源代码在 src/cmd/compile 目录中编译器分为前端和后端编译器的前端一般承担着词法分析、语法分析、类型检查、中间代码生成;后端主要负责目标代码的生成和优化,即,将中间代码翻译成目标机器能够运行的二进制机器码。二、Go 编辑器上的四个转换阶段...
2020-03-10 09:47:04
683
原创 flask_apscheduler 封装应用
flask_apscheduler 封装应用一、 常规初始化# extensions.pyfrom flask_apscheduler import APSchedulerscheduler = APScheduler()# app.pyimport atexitimport fcntlimport pathlibfrom flask import Flaskfrom ..e...
2020-02-21 10:28:13
657
原创 消息队列的高并发优化
消息队列的高并发优化一、消息队列的基础总结1-1 使用场景 - 解耦、异步、削峰1-1-1 解耦初级使用阶段,通常使用调用接口的方式,连接多个系统。例如,A系统内调用了B/C/D的接口,若添加新系统E的接口调用,删除系统C的接口调用,则都需要修改A系统内的调用代码,存在耦合性。A 系统调用接口传输数据,需要时刻考虑调用接口的系统如果宕机的处理方法。所以使用MQ进行优化,使用MQ,则...
2019-11-12 11:16:34
3847
原创 Locust - 压测 WebSocket 连接数超 1024 报错
文章目录一、错误信息二、错误可能性分析及处理2-1 使用 select() 支持并发连接数有限2-1-1 基于当前脚本的错误分析2-1-2 JMeter 下 WsbSocket 长连接数测试 - 排除系统原因2-1-3 Locust 的单机多进程使用(分布式运行)2-2 测试机内部端口等未调优2-2-1 测试机的连接数优化2-2-1、测试机优化参考一、错误信息二、错误可能性分析及处理l...
2019-10-30 16:56:28
1757
原创 RPC (remote procedure call) - 相关学习和总结
RPC (remote procedure call) - 相关学习和总结文章目录RPC (remote procedure call) - 相关学习和总结一、概念总结1-1 RPC 的基本流程1-2 RPC vs REST二、RPC 下的 client 和 server - go2-1 server 端2-2 client 端三、RPC 框架3-1 gRPC - 高性能、开源、多语言、非分...
2019-10-25 17:11:58
666
原创 Protocol Buffers -基础学习和总结
文章目录一、 基本概念二、 基本组成及写法 - proto3 with Python2-1 Message descriptors2-2 Message implementations2-3 Parsing and Serialization三、 使用相关错误总结一、 基本概念Protobuf 官方文档Google 开发的传输协议,对结构化数据进行序列化和反序列化,类比 JsonProto...
2019-10-25 15:49:44
396
原创 测试 - 基于 Locust 的 WebSocket-server 压力测试
基于 Locust 的 WebSocket-server 压力测试文章目录基于 Locust 的 WebSocket-server 压力测试一、Locust 的基本学习1-0 最简单的事例1-1 基本使用1-2 基于内置 http 请求的源码分析二、实现基于 WebSocket 协议的压力测试三、可视化界面测试一、Locust 的基本学习Locust 官方文档1-0 最简单的事例from...
2019-10-24 15:45:17
3964
2
原创 Flask - BUG - flask-sqlalchemy - sqlalchemy.orm.exc.DetachedInstanceError
目录错误展示代码展示产生原因解决方式错误展示flask - sqlalchemy - 官方解释文档代码展示产生原因每次仅使用一个session,commit会将session内所有对象进行提交并删除,则后续session内无对象,需要手动add。每次调用db.session它都会将调用传递给绑定到当前作用域(由其定义scopefunc)的...
2019-09-19 16:32:38
1581
原创 Celery - 配置文件总结
目录一、broker or backend 连接二、定时任务celery - 官方配置文档Setting name Replace with CELERY_ACCEPT_CONTENT accept_content CELERY_ENABLE_UTC enable_utc CELERY_IMPORTS imports CELERY_INCLU...
2019-09-12 14:14:17
2504
1
原创 API Specification - API 书写规范格式总结
API - SpecificationAPI 书写规范格式总结文章目录API - SpecificationOpenAPI-SpecificationAsyncAPI - SpecificationAsyncAPI vs OpenAPI - 异同对比OpenAPI-SpecificationOpenAPI - githubOpenAPI - websiteSwagger - 支持O...
2019-09-10 10:03:40
1038
原创 JavaScript - 作为 webclient 处理 WebSocket 返回数据
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Tornado WebSocket Test</title> <script src="https://cdnjs.cloudflare.com/ajax/...
2019-09-03 10:58:26
2509
原创 Python - Pathlib - 面向对象的文件系统路径
文章目录一、Pathlib 替代 os.path 和 glob 模块1-1 pathlib vs os.path 应用对比1-2 pathlib vs glob (Unix风格的路径名模式扩展) 应用类比1-3 不同系统的文件路径规范1-4 path对象的接受1-5 string 和 path 对象的相互转换二、Pathlib - 面向对象的文件路径处理2-0 所有类解析2-1 Path 类的属...
2019-08-29 16:31:19
872
原创 Asynchronous - 相关总结整理
目录一、asyncio1-1 判断是否为async方法1-1-1 方法一、inspect 标准库1-1-2 方法二、asyncio 标准库二、aiohttp vs tornado - 基于async的web框架三、uvloop - 替代asyncio的事件循环3-1 tornado with asyncio、uvloop四、AIO、BIO、NIO一、async...
2019-08-22 10:59:11
374
原创 Pandas - 基本构造方式及其转换
目录零、Pandas 基本介绍一、Series - 一维数据结构二、DataFrame - 二维数据结构2-1 二维数据构造方式2-1-2 从dict 构造2-1-3 从 python list 构造2-1-4 从 numpy ndarray 构造三、DataFrame & Python Type 的相互转换3-0 DF构造3-1 DF.T.to_...
2019-07-17 11:00:43
1363
原创 Pandas - K线数据处理 - 数据聚合
目录一、K线分析二、pandas.DataFrame.resample - 内置聚合方法2-0 测试数据初始化2-1resample 的 3分钟聚合2-2resample 的 30s 拆成2-3 自定义聚合逻辑 - apply2-4 DataFrame 对象的 resample 处理方式三、K线聚合的业务实现方式一、获取批量数据 + resample处理...
2019-07-16 17:38:12
5576
原创 Tornado - Middleware
目录一、RequestHandler 基础类支持RequestHandler.initialize() - 用于子类初始化,每个请求都会调用RequestHandler.prepare() - 处理请求方法前的调用函数RequestHandler.on_finish() - 请求结束后的调用函数RequestHandler.finish(chunk:Union [str,...
2019-07-10 14:49:02
1320
原创 WebSocket - Tornado - Ping & Pong
目录一、Tornado 内置 ping 设置1-0 ping 帧1-1 ping 帧 发送1-2 Tornado setting 相关项1-3 client & server 端处理 ping 帧1-3-1 server 端1-3-2 client 端 - 基于 ws-client 库二、业务逻辑 ping & pong2-0 业务逻辑分析2...
2019-07-09 09:42:48
3668
1
原创 WebSocket - Tornado 的基本实现总结
目录零、基本信息一、一对一长连接1-1 server 端1-2 client 端二、一对多长连接三、tornado 内置定时调度四、实现脚本定时调度触发ws的消息推送方式一、ioloop调度脚本触发ws推送方式二、服务端开启http 和 ws 的api,脚本向发送http请求触发ws的推送零、基本信息官方文档 - 中文一、一对一长连接...
2019-07-04 15:57:26
3063
原创 MongoDB - mongo 的数据监听
目录一、 基于主从复制机制的oplog进行信息获取1-1 mongodb单实例开启oplog1-2 oplog的基本操作1-3 基于pymongo的简单操作1-3-1 oplog 对象获取1-3-2 mongo 时间戳处理1-3-3 多条件查询1-4 Python 监控脚本实现1-5 Tornado WS + Oplog watcher 的简单实现二、 基于...
2019-07-03 17:29:09
5118
原创 WebSocket - 基于 Python 的主流实现方式总结
目录一、WebSocket -网络通信协议1-1 简介二、Websockets servers and clients in Python2-0 connect2-0-1 建立一对一短连接 2-0-2 建立一对一长连接2-0-3 建立一对多长连接2-1 asyncio三、SocketIO3-0 Flask-Sockets VS Flask-SocketIO...
2019-07-02 14:56:16
29486
2
原创 BUG - 数据爬取返回状态码“521”
目录一、521返回分析和处理思路总结二、代码实现2-1 安装必要依赖 - PyExecJS2-2 根据 521 返回数据生成新的 cookie2-3 捕获 521 错误,并重新发起请求一、521返回分析和处理思路总结521处理 - 参考链接浏览器访问网站时 第一次请求:返回521状态码和一段js代码。js会生成一段cookie并重新请求访问。 第二次请求:...
2019-06-18 12:02:44
6633
2
原创 Mongodb - 数据自然排序问题
目录数据自然排序问题总结影响自然排序的情况固定集合的自然顺序(Capped Collections‘ natural order)注意点_id 和 $natural数据自然排序问题总结mongoDB 官方文档 -Document Field OrderThe_idfield is always the first field in the document. Up...
2019-06-11 11:10:40
3667
原创 PyMongo - 连接错误 - pymongo.errors.OperationFailure: not authorized on test to execute command
错误代码解决方式参考链接官方文档 - Connection String URI Format
2019-06-10 17:23:21
7652
原创 Scrapy - IP 池
目录一、中间件的使用1-1 具体方法详解1-1-1process_request - 正常请求调用1-1-2process_response - 正常返回调用1-1-3process_exception - 捕获错误调用二、Proxy 相关官方中间件2-1HttpProxyMiddleware2-2 RetryMiddleware2-2-1 源码分析...
2019-06-06 17:16:22
3369
原创 爬虫 - scrapy 框架 - 基本爬取流程
目录一、项目启动二、Item 指定对象内容 - 类比 ORM三、Spider 爬取数据四、执行爬虫五、pipeline 数据数据库存储5-1 存储5-2 配置参数5-3 激活管道scrapy - 官方1.6版本文档一、项目启动scrapy 入门教程确认环境创建 scrapy 项目目录进入自定义目录创建项目目录scrapy start...
2019-06-05 15:37:56
1088
原创 Mongodb - PyMongo - 基本使用
目录一、安装二、简单操作2-0 建立连接2-1 建库(database)、建表(collection)2-2 文档操作2-2-1 增2-2-2 删2-2-3 改2-2-4 查2-3 索引建立一、安装二、简单操作菜鸟教程 - MongoDB PythonmongoDB - 官方使用文档PyMongo 官方文档2-0 建立连接...
2019-05-29 12:02:12
6787
原创 设计模式 - 创造模式(Creational Patterns)
设计模式 - 创造模式(Creational Patterns)文章目录设计模式 - 创造模式(**Creational Patterns**)一、Borg Pattern - 共享单例模式1-1 简单认识1-1-1 Borg 特点1-1-2 Borg vs Singleton1-2 Python 实现1-2-1 装饰器实现1-3 应用场景1-3-1 数据库连接管理二、工厂模式、抽象工厂模式2-...
2019-05-27 15:15:16
1321
原创 Flask - flask-pika 操作 Rabbit
目录一、flask-pika二、基于 Flask 框架的初步使用2-1 生产者的队列堵塞问题一、flask-pika官方 github安装二、基于 Flask 框架的初步使用生产者包装成API调用,消费者使用其他进程监听执行'''配置文件 dev.py'''FLASK_PIKA_PARAMS = { 'host': 'localhos...
2019-05-22 17:33:27
4019
1
原创 消息中间件 - RabbitMQ - Python pika 库
目录零、RabbitMQ 总结0-1 channel0-2 Exchange、Queue、Route 三者的关系和交互一、轮询消费模式1-1 生产者1-2 消费者二、队列持久化三、广播模式 - ECHANGE3-1 fanout - 转发速度最快3-1-1消费者(订阅者)3-1-2 生产者(发布者)3-2 direct - 路由键的完全匹配分发...
2019-05-22 14:20:14
722
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人