go

捋一捋少有人知的 Python "重试机制"

扶醉桌前 提交于 2021-02-01 11:14:46
点击上方“ Python爬虫与数据挖掘 ”,进行关注 回复“ 书籍 ”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 弃我去者,昨日之日不可留。 周末愉快,欢迎小伙伴积极学习,文末有 《 Python数据分析 》5本书籍的送书活动 ,记得参与噢~ 为了避免由于一些网络或等其他不可控因素,而引起的功能性问题。 比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题。 这种情况下,我们通常会在代码中加入重试的代码。重试的代码本身不难实现,但如何写得优雅、易用,是我们要考虑的问题。 这里要给大家介绍的是一个第三方库 - Tenacity (标题中的重试机制并并不准确,它不是 Python 的内置模块,因此并不能称之为机制),它实现了几乎我们可以使用到的所有重试场景,比如: 在什么情况下才进行重试? 重试几次呢? 重试多久后结束? 每次重试的间隔多长呢? 重试失败后的回调? 在使用它之前 ,先要安装它 $ pip install tenacity 1. 最基本的重试 无条件重试,重试之间无间隔 from tenacity import retry @retry def test_retry () : print( "等待重试,重试无间隔执行..." ) raise Exception test_retry() 无条件重试,但是在重试之前要等待 2 秒 from

Prometheus核心概念:一图了解瞬时向量Instant vector和区间向量Range vector的区别

∥☆過路亽.° 提交于 2021-02-01 10:32:15
1 背景 我们在查询Prometheus的时候,通常有两种方式,一种是查瞬时的Metric采样数据,一种是查一段时间范围内的Metric采样数据。 如果对这两种查询方式理解不到位,结果往往是对PromQL的一些内置函数的使用是错误的,或者查询的结果并不是自己预期的那样。 那都是查Metric采样数据,查询瞬时和查询一段时间范围内这两种方式有什么区别呢? 2 图解Metric和采样 Prometheus和Exporter的关系 在上一篇文章 Prometheus源码分析:基于Go Client自定义的Exporter,是如何在Local存储Metrics的? 中,我们介绍了Exporter是如何在Local存储Metric的。 本质是将Metric放在本地的Map中,然后等待Prometheus服务端来周期性地Pull。 3 从Prometheus服务端的视角来看Metric采样 Prometheus对target的Metric进行采样 Prometheus会周期性的对Exporter的target进行PULL。 例如:在时间T1,Prometheus访问target,采样到的Metric信息是:Metric01=Vt1 例如:在时间T2,Prometheus访问target,采样到的Metric信息是:Metric01=Vt2 Metric02=Vt2 上述示例说明

Linux禁止ping以及开启ping的方法

元气小坏坏 提交于 2021-02-01 04:01:10
作者:Happiness 来源:https://urlify.cn/Mr6zMb ☞ 当当网4.23图书3.9折大促 ☜ Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的 : 1. 内核参数 2. 防火墙 需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping。 内核参数设置 禁止ping设置: 1)临时禁止ping命令如下所示: # 如果想要临时允许的话只需要把下面的1换成0即可 echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all 2)永久禁止ping命令如下所示(如果想要永久允许的话只需要把下面的1换成0即可) 在 /etc/sysctl.conf 文件中增加一行 net.ipv4.icmp_echo_ignore_all=1 修改完成后执行 sysctl -p 使新的配置生效。 防火墙设置 (注意:此处的方法的前提是内核配置是默认值,也就是没有禁止ping) 这里以iptables防火墙为例: 1)允许ping设置 iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT 或者可以临时停止防火墙操作:

深入学习golang(2)—channel

断了今生、忘了曾经 提交于 2021-01-31 11:19:35
Channel 1. 概述 “网络,并发”是Go语言的两大feature。Go语言号称“互联网的C语言”,与使用传统的C语言相比,写一个Server所使用的代码更少,也更简单。写一个Server除了网络,另外就是并发,相对python等其它语言,Go对并发支持使得它有更好的性能。 Goroutine和channel是Go在“并发”方面两个核心feature。 Channel是goroutine之间进行通信的一种方式,它与Unix中的管道类似。 Channel声明: ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType . 例如: var ch chan int var ch1 chan<- int //ch1只能写 var ch2 <-chan int //ch2只能读 channel是类型相关的,也就是一个channel只能传递一种类型。例如,上面的ch只能传递int。 在go语言中,有4种引用类型:slice,map,channel,interface。 Slice,map,channel一般都通过make进行初始化: ci := make(chan int) // unbuffered channel of integers cj := make(chan int, 0) // unbuffered

【Golang】基于录制,自动生成go test接口自动化用例

偶尔善良 提交于 2021-01-31 05:45:02
背景 之前写过一篇博客,介绍怎么用Python通过解析抓包数据,完成自动化用例的编写。最近这段时间在使用go test,所以就在想能不能也使用代码来生成自动化用例,快速提升测试用例覆盖率。说干就干。 框架 首先介绍一下我们使用的测框架: 项 信息 安装 备注 GO版本 go1.12.9 darwin/amd64 略 测试框架 ginkgo go get -u github.com/onsi/ginkgo/ginkgo 断言库 testify/assert go get github.com/stretchr/testify 官方配套的断言库是gomega ginkgo初始化 初始化: cd path/to/package/you/want/to/test && ginkgo bootstrap 创建示例用例: ginkgo generate (需要手动添加测试用例) 运行测试: go test or ginkgo 注: -v 加上参数可打印运行信息 抓包&运行脚本 使用抓包工具(如Charles)抓包,把数据包导出为har格式,保存在当前目录下 如何安装抓包工具在本文就不赘述了,抓包,过滤出想要的数据,导出,保存的格式注意选择为 har : 根据实际情况修改全局变量信息,如bizBaseFolder、serverName、userFile等 使用 go run gentest.go

Go 实现字符串相似度计算函数 Levenshtein 和 SimilarText

て烟熏妆下的殇ゞ 提交于 2021-01-31 05:00:54
【转】 http://www.syyong.com/Go/Go-implements-the-string-similarity-calculation-function-Levenshtein-and-SimilarText.html levenshtein() 和 similar_text() 是 PHP 内置的两个字符串相似度计算函数。Levenshtein 计算两个字符串之间的编辑距离,SimilarText 计算两个字符串的相似度。下面使用Go分别实现二者。 Levenshtein // levenshtein() // costIns: Defines the cost of insertion. // costRep: Defines the cost of replacement. // costDel: Defines the cost of deletion. func Levenshtein(str1, str2 string , costIns, costRep, costDel int ) int { var maxLen = 255 l1 : = len(str1) l2 : = len(str2) if l1 == 0 { return l2 * costIns } if l2 == 0 { return l1 * costDel } if l1 >

Rust编程进阶:043、多线程介绍

十年热恋 提交于 2021-01-30 18:55:24
1、进程是资源分配的最小单位,线程是CPU调度的最小单位。 2、在使用多线程时,经常会遇到的一些问题: (1)竞争状态:多个线程以不一致的顺序访问数据或资源; (2)死锁:两个线程相互等待对方停止使用其所拥有的资源,造成两者都永久等待;A:1->2->3 B:2->1->3 t1:A:1,B:2 接下来:A:2,B:1 造成死锁 (3)只会发生在特定情况下且难以稳定重现和修复的bug 3、编程语言提供的线程叫做绿色线程,如go语言,在底层实现了M:N的模型,即M个绿色线程对应N个OS线程。但是,Rust标准库只提供1:1的线程模型的实现,即一个Rust线程对应一个OS线程。运行时代表二进制文件中包含的由语言本身提供的代码,这些代码根据语言的不同可大可小,不过非汇编语言都会有一定数量的运行时代码。通常,大家说一个语言“没有运行时”,是指这个语言的“运行时”很小。Rust、C都是几乎没有运行时的。 来源: oschina 链接: https://my.oschina.net/u/943779/blog/4938624

go字符串编码转换

為{幸葍}努か 提交于 2021-01-30 15:34:27
https://github.com/axgle/mahonia package main import "fmt" import "github.com/axgle/mahonia" func main(){ enc:=mahonia.NewEncoder("gbk") //converts a string from UTF-8 to gbk encoding. fmt.Println(enc.ConvertString("hello,世界")) } 来源: oschina 链接: https://my.oschina.net/u/1383296/blog/4555093

JavaScript图表工具FusionCharts缩放折线图

邮差的信 提交于 2021-01-30 13:51:58
FusionCharts Suite XT是全面的跨平台、跨浏览器JavaScript图表套包,其中包括FusionCharts XT、PowerCharts XT 、FusionWidgets XT、FusionMaps XT。支持 ASP、 ASP.NET、 PHP、 JSP、 ColdFusion、 Ruby on Rails、 JavaScript、甚至简单的HTML页面。它是你值得信赖的JavaScript图表解决方案,目前在全球有45万用户选择Fusioncharts来制作专业的JavaScript图表。 下载FusionCharts最新版【慧都网】 创建缩放折线图 例如,我们将创建一个缩放折线图,以绘制去年每一天对harrysfoodmart.com和harrysfashion.com网站的唯一网站访问次数。 要创建缩放折线图,请执行以下步骤: 在JSON数据中,以"<attributeName>": "<value>"格式设置属性及其对应的值。 使用type属性指定图表类型。要渲染缩放折线图,请设置zoomline。 使用renderAt属性设置容器对象。 使用width和height属性指定图表的尺寸。 使用dataFormat属性设置要传递给图表对象的数据类型(JSON / XML)。 将compactDataMode属性设置为,1以指定JSON数据为紧凑格式。

C#循环

纵然是瞬间 提交于 2021-01-30 10:14:34
问题: In a C# (feel free to answer for other languages) loop, what's the difference between break and continue as a means to leave the structure of the loop, and go to the next iteration? 在C#(随意回答其他语言)循环中,break和continue之间的区别是什么,作为离开循环结构的手段,并进入下一次迭代? Example: 例: foreach (DataRow row in myTable.Rows) { if (someConditionEvalsToTrue) { break; //what's the difference between this and continue ? //continue; } } 解决方案: 参考一: https://stackoom.com/question/1fS/C-循环-中断与继续 参考二: https://oldbug.net/q/1fS/C-loop-break-vs-continue 来源: oschina 链接: https://my.oschina.net/u/4437974/blog/4329936