mysql 清除重复数据
python代码12345678910111213def clean_table(db: Session): select_sql = ('SELECT MIN(id) as id,col1,col2,COUNT(*) FROM table ' 'GROUP BY col1,col2 ' 'HAVING COUNT(*) > 1 LIMIT 200 ') while True: select_sql_res = db.execute(select_sql).fetchall() if not select_sql_res: break delete_ids = [str(item["id"]) for item in select_sql_res] delete_sql = ('DELETE FROM table ' ...
列举mysql正在执行中的全部事务
应急方法show full processlistkill掉出现问题的进程。ps.有的时候通过processlist是看不出哪里有锁等待的,当两个事务都在commit阶段是无法体现在processlist上
Go 语言分布式任务处理器 Machinery – 架构
原文链接:https://marksuper.xyz/2022/04/20/machinery1/
Go 语言分布式任务处理器 Machinery – 架构,源码详解篇你是否因为一个复杂的分布式并发场景且需要进行任务编排而写了一个逻辑复杂,各种耦合,又臭又长的代码?代码跑起来各种bug 浪费时间精力,其他人也看不懂没法接手?
其实 Go 语言有现成的轮子来辅助你实现复杂的逻辑,让你的代码优美,低耦合,鲁棒性强,少bug。这个就是分布式队列Machinery
本文深度结合源码讲解Machinery的使用方法和需要注意的坑位,让你从根上掌握Machinery的使用方法。
优势我们为什么要使用任务处理器?其实引入一个轮子之前想清楚他的优势是十分必要的,如果不充分了解他的优势那么很可能就为了用而用,很多场景可能使用它反而浪费了系统性能。我们就先来看下Machinery 的优势:
Machinery 支持定义串行,并行 ,延迟,重试,定时等各种任务执行方式,并且你可以在定义好任务执行方式后对多个任务进行编排,调任务整先后完成顺序,他还对数据处理结果进行缓存,处理结果出错可以再次处理,增加程序的鲁 ...
gin 框架实现异步处理
12345678910111213141516171819202122232425262728293031package mainimport ( "log" "time" "github.com/gin-gonic/gin")func main() { // 1.创建路由 // 默认使用了2个中间件Logger(), Recovery() r := gin.Default() // 1.异步 r.GET("/long_async", func(c *gin.Context) { // 需要搞一个副本 copyContext := c.Copy() // 异步处理 go func() { time.Sleep(3 * time.Second) log.Println("异步执行:" + copyContext.R ...
flask orm 对象序列化
12345678def orm_serialize(item) -> dict: if item: try: return {c.name: getattr(item, c.name) for c in item.__table__.columns} except: return {} else: return {}
es6完全深拷贝一个对象
123export const deepClone = (obj: object) => { return JSON.parse(JSON.stringify(obj));}
编辑距离算法
1234567891011121314151617181920212223242526272829303132333435const levenshteinDistance = (str1: string, str2: string) => { const len1 = str1.length; const len2 = str2.length; const matrix: Array<number[]> = []; // 初始化第一行 for (let i = 0; i <= len1; i++) { matrix[i] = [i]; } // 初始化第一列 for (let j = 0; j <= len2; j++) { matrix[0][j] = j; } // 填充矩阵 for (let i = 1; i <= len1; i++) { for (let j = 1; j ...
es6过滤对象的某个属性
使用 Object.entries() 方法将对象转换成一个键值对的数组,然后使用 reduce() 方法遍历这个数组并过滤掉不需要的属性。最后,使用一个空对象作为累加器(acc),将过滤后的属性存储到这个对象中。
123456789const fields = { name: "xxx", age: 18, other: null}const filteredFields = Object.entries(fields).reduce((acc, [key, value]) => { if (key && value) { acc[key] = value; } return acc;}, {});console.log(filteredFields)
flask-sqlalchemy orm 框架序列化
123# 如果对象是ORM对象,则将其转换为字典并返回if isinstance(obj.__class__, DeclarativeMeta): return {c.name: getattr(obj, c.name) for c in obj.__table__.columns}
celery flower api 接口认证
12345678auth_user = 'admin'auth_passwd = '123456'usrPass = "%s:%s" % (auth_user, auth_passwd)b64Val = base64.b64encode(usrPass.encode('utf-8'))headers = { "Authorization": "Basic %s" % b64Val.decode(),}print(headers)