Go 包多版本管理

项目格式 -project -bytes_core -go.mod -pool -a.go -b.go -redis_core -etcd_core 关于不同core包,版本管理的问题,主要有以下几点需要注意 每个core包里需要有mod文件,mod文件开头需要以域名/当前包路径,例如github.com/xxx/project/bytes_core 在修改完某一个core包代码后,commit完后,单独打……

阅读全文

golang unsafe初探——根据字段计算结构体实例地址

在Go中,第一个字段的地址即为结构体地址 观察代码运行结果,理解golang对象与字段地址的偏移计算 说明:Pointer和uintptr方法可以理解为本质上都是指针,前者一般用来转化类型,后者用来计算地址 type Buffer struct { buf [1500]byte n int8 } func main() { instance := new(Buffer) { println(instance) println(instance.buf[:]) println(&instance.buf[0]) b := (*Buffer)(unsafe.Pointer(&instance.buf[0])) // 根据buf字段算出实例对象的地址……

阅读全文

Golang 正则

. 匹配多行,匹配包括 re := regexp.MustCompile(`(?s)i(.*?)u`) fmt.Println(re.MatchString("i\nlove\nu")) // true // 部分使用 s 模式,下同 re := regexp.MustCompile(`i(?s:.*?)l(.*)`) // 只有第一个括号中使用了s模式 fmt.Println(re.FindString("i \nlove\n u")) // i\nlove 忽略大小写 re := regexp.MustCompile(`(?i)love`) fmt.Println(re.MatchString("i\nLOVE\nu")) // true 多行使用^ $匹配行首和行尾 re := regexp.MustCompile(`(?m)^love$`) fmt.Println(re.MatchString("i\nlove\nu")) // true……

阅读全文

一次request线程卡死排查

线程下载nginx静态文件内容,写的逻辑是只有下载完毕才会退出,否则就无限重试,用的是requests 流下载,每个线程负责一个zip包的下载 程序运行几天后发现有的线程在下载过程中卡死,文件没有下载好,线程也没有退出,就hang住了 程序发现这个问题后,我在每一次调用线程去下载文件时……

阅读全文

python process 使用

创建进程 方式一:直接继承Process类 from multiprocessing import Process p = Process(target=fun, name='...',args=(param,), kwargs={...}, daemon=bool) p.start() p.join() print('p子进程执行完才到我了') daemon 表示守护进程,当为子进程上设置为True时,主进程结束(这里的结束指代码级的结束, 如果为False,会一直等到子进程结束,父进程才结束),会发送SIGTERM(即相当于kil……

阅读全文

pandas resample

pandas 重采样参数 resample(self, rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0, on=None, level=None) 例子 series.resample('3T').sum() rule effect B 工作日频率 C 定制营业日频率(实验) D 日历日频率 W 每周一次的频率 M 月末频率 BM 业务月末频度 CBM 定制业务月底频度 MS 月启动频率 BMS 业务月开始频率 CBMS 自定义业务月启动频率 Q 四分之一端频率 BQ 业务季度末频率 QS 四分之一起动频率 BQS 季度开始频率 A 年末频率……

阅读全文

linux 常用命令

指令 功能 screen screen -S 子会话名称 创建新的子screen screen -r 名称 进入某screen screen -wipe 清除dead状态的会话 screen -ls 列出当前所有的session ctrl+a+d 暂离当前screen exit -r 进入会话后,键入exit退出并关闭当前screen实例 vim :5,10 s/正则/替换值 从5到10行每行第一个正则匹配数据进行替换 :5,10 s/正……

阅读全文

pandas 绘制bloomfilter 错误冲突曲线

利用pandas绘制bloomfilter的概率曲线 字母 含义 m bit数组的宽度(bit数) n 待测key的数量 k 使用的hash函数的个数 f False Positive的比率 Bloom Filter公式: f = (1 – e-kn/m)k import numpy as np import pandas as pd import matplotlib.pyplot as plt import math e = math.exp(1) plt.ylabel('error probability') plt.xlabel('number of hashfunc') k=range(1,9,1) for i in range(1,31,5): f=list(map(lambda k:(1-e**(-k*i/100))**k,k)) plt.plot(k,f,'-o',linewidth=1,markersize=3) # 设置线标 plt.legend(list(map(lambda x:f'{x}%',range(1,31,5)))) plt.show()……

阅读全文

python wrapper 装饰器

装饰器的@是一个语法糖,调用被装饰的函数时相当于以下等式关系 装饰器不带参数:func() = 装饰器名(func)() 装饰器带参数:func() = time_count(‘参数’)(func)() 函数实现装饰器: from functools import wraps def time_count(参数): def test(fun): @wraps(fun) def wrapper(*args,……

阅读全文

python 迭代器

网上有很多迭代器与生成器的介绍,此处不啰嗦,简单概括一下。 迭代器即实现了 __iter__ 与 next() 迭代器可以通过iter(可迭代对象)创建 迭代器本质是在不停地产生新的对象以此节约内存 生成器是一个包含yield关键字的函数调用后的对象(是一种迭代器) 思考:既然迭代器是不停地生产一个对象,那iter()……

阅读全文