- 博客(92)
- 收藏
- 关注
原创 vscode如何设置go test -v
发现在vscode上执行go test的时候没有加上-v的flag,让我看不到fmt.Println 的输出。
2024-10-10 15:41:09 311
原创 从etcd学习raft
在etcd的项目下有一个使用raft的示例,在之前读etcd代码的时候会比较难理解raft相关的代码。因此通过这个示例会更容易的了解raft相关的实现细节。我将这部分代码推送到了我的git仓库:https://github.com/yugu2day/raftexample在示例中,主要是构建了一个基于map的k-v存储服务, 支持PUT和GET对键值内容的存取,通过POST和DELETE来添加/删除raft集群中的节点。
2024-08-26 21:47:49 625
原创 etcd 的Put请求处理
在介绍etcdctl的内容中,我们知道了etcdctl实际上是向etcd服务端执行了grpc请求获取对应的结果,这一篇主要介绍当向etcd服务端执行Get/Put指令的时候究竟做了哪些工作。
2024-08-22 15:28:50 620
原创 etcdctl的实现
在上一篇本地启动etcd之后,通过etcdctl命令来进行相关操作。这一篇记录一下etcdctl是如何实现的。在源码中很容易找到相关目录
2024-08-19 17:55:50 431
原创 etcd启动和测试
趁着失业看点没看过的东西,先在本机上启动etcd的环境再跟着文档看看一些具体的实现。首先可以再docker上pull一个最新的镜像并启动,用docker启动一个容器会比较方便的得到一个干净隔离的环境,需要删除的时候也更彻底一些。官方文档: https://etcd.io/docs/v3.5/tutorials/
2024-08-16 22:13:00 403 1
原创 CLUSTERDOWN The cluster is down 的解决办法
在本机上单机创建redis cluster执行命令报错 (error) CLUSTERDOWN The cluster is downredis-cli --cluster check 127.0.0.1:6379给出问题原因 not all 16384 slots are covered by nodes因此是部分slot分配的节点已经挂掉了输入命令 redis-cli --cluster fix 127.0.0.1:6379问题解决...
2021-02-25 10:33:05 13781 5
原创 【golang】go 使用sarama写入kafka数据时间戳问题
查看消息时间戳的命令:kafka-console-consumer --bootstrap-server localhost:9092 --property print.timestamp=true --topic test --from-beginning发现sarama生产者推送到kafka的CreateTime均为-1。而命令行推送到kafka的时间戳正常。原因:sarama默认支持的是0.8.2的kafka版本,而timestamp的支持是从0.10版本开始的。因此需要初始化生产者配置时指
2020-09-18 14:07:38 941
原创 Scrapy logging日志重复输出的解决方法
如果是完全在scrapy流程中的日志,一般有三种输出方式。from scrapy.log import loggerlogger.info("info")# 会抛出warning,警告scrapy.log已经被废弃,此时的logger为 scrapy.log# ScrapyDeprecationWarning: Module `scrapy.log` has been depreca...
2020-04-08 19:08:18 1781 6
原创 【爬虫】Python http.client能拿到数据而requests状态码异常
遇到一个case,抓包之后丢进postman无法正常拿到数据,使用curl和requests时也无法正常取到数据。而java,go,python的http.client库可以正常取到数据。当url和headers相同时,不同库的请求拿到结果不同。对requests和http.client请求抓包进行对比。headers一个个看过去发现requests多了一个accept请求头,那accept请求...
2020-03-18 10:23:39 696
原创 python sorted函数自定义排序
一般使用sorted函数的时候,直接会将key设置为一个lambda表达式的匿名函数。这样一般可以直接对字典的key或者value进行排序。但是今天刷leetcode的时候,需要对字典value的数组进行逐一排序,当value一致时,按key的字母顺序排序。这时候就需要自定义比较方法了。通过functools中的com_to_key将一个函数转变为参数key的值。https://leetco...
2020-03-01 15:14:14 1520
原创 scrapy请求头首字母大写的解决方法
背景:同样的url, headers, payload进行post请求,requests可以正确的拿到数据,而scrapy则无法通过验证。通过抓包发现,scrapy所发出的请求头首字母均为大写,在postman中将请求头的各个key改为小写后能正确拿到请求数据。原因:scrapy的Request对象通过传入的headers字典初始化了一个scrapy.http.Headers对象,Head...
2020-01-09 12:01:58 1503 1
原创 uiautomatorviewer报错:java.lang.reflect.InvocationTargetException
在使用uiautomatorviewer对设备进行截屏时,出现异常Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException解决方法:通过android studio对sdk tool进行了更新,从25.x 升级到了26.1.1升级后sdk manager没有界面了,ui...
2019-12-16 20:50:02 2283
原创 在linux服务器上搭建mitmproxy
pip install mitmproxymitmdump --listen-host 0.0.0.0 -p 5555如果服务器与手机不在同一局域网,确定手机能连通服务器的情况下,启动mitmproxy时增加–set block_global=false...
2019-12-14 16:58:17 1080
原创 Python过滤字符串中的unicode乱码
最近获取到的字符串里除了正常的汉字字符外,有一些unicode的乱码在里面显示异常。 我是憨憨因此想要过滤掉这些显示异常的字符。str = eval(str.__repr__())可以通过repr获取raw string,进行正则匹配替换。这样就将字符串中的乱码unicode过滤掉啦!~...
2019-08-01 20:16:37 7192
原创 brew cask install java8 失败
用网上看到的命令,结果brew cask 找不到指定版本brew tap caskroom/versionsbrew cask install java8Error: Cask ‘java8’ is unavailable: No Cask with this name exists.搜到一条命令brew cask install adoptopenjdk8下载结束后java -ve...
2019-05-25 10:28:58 9273
原创 (六)Scrapy的抓取流程——Downloader
当通过Scheduler取出一条request之后,engine就会调用_download方法进行对这条request的下载。图中downloader的fetch方法就是下载器对request的操作方法。通过DownloaderMiddlewareManager在download方法中定义了process_request, process_response, process_excepti...
2019-04-26 19:44:23 450
原创 【Pyppeteer】ConnectionError:Connection is closed解决办法
想着用Pyppeteer写一个渲染web页面的接口,测试的时候发现过不了多久。常驻的browser在newPage()创建的时候就会报错。一直提示Connection is closed。这种情况应该也适于其他连接异常的情况。出现这种情况的原因是建立连接是通过websocket库,而websocket连接默认过期时间是20s,所以经过20s后连接断开也就无法控制浏览器了。解决方法:在...
2019-04-18 15:04:29 9470
原创 inode使用率过高的解决方法
周末因为一个鸟程序的日志每条都疯狂输出到一个文件,直接把inode塞满了。记一下排查方法和删除大量文件所做的一些措施。问题排查for i in /*; do echo $i; find $i | wc -l; done首先使用上面的这条命令一步步缩小范围,确定在哪个目录下inode的节点数过多异常。最后我锁定到了日志目录,可是里面只有几个日志文件,在目录下直接运行这条命令也只能看到可...
2019-04-15 10:37:13 9866
原创 (五)Scrapy的抓取流程——Scheduler
在Engine中,是通过Engine实例化的slot对象进行对scheduler对象的初始化,和任务状态的记录。# engine.py中ExecutionEngine的crawl方法def crawl(self, request, spider): assert spider in self.open_spiders, \ "Spider %r not opened w...
2019-04-11 20:04:33 2693
原创 (四)Scrapy的抓取流程——Engine
上一篇提到在Crawler的crawl方法中,启动了Engine。而如Scrapy流程图中描述的,抓取的流程由Engine主导完成。engine是ExecutionEngine的实例,初始化时会初始化诸如scheduler、downloader、scraper(itempipeline和spidermiddleware这一块)等属性。engine.py所在的目录,抓取流程中的主要模块。E...
2019-04-10 20:41:27 993
原创 (三)Scrapy的抓取流程——CrawlerProcess
上一章提到scrapy的启动是通过ScrapyCommand对象中的crawler_process实现的,crawler_process是通过crawler.py下的CrawlerProcess类创建的实例。该文件下定义了Crawler,CrawlerProcess和CrawlerRunner三个类。CrawlerProcess是CrawlerRunner的子类,而命令文件中的self.craw...
2019-04-09 20:25:33 5748
原创 (二)Scrapy的初始化
初始化一个scrapy项目时往往是通过startproject 和 genspider两个命令。了解scrapy进行命令输入时的逻辑是怎样实现的之后,我们可以看看commands文件夹下这两个命令是如何运行的。(1) startproject当我们新建一个项目时通过scrapy startproject <project_name> [project_dir] 命令实现。输入...
2019-04-03 21:07:29 1270
原创 (一)Scrapy的命令行
最近一直都是在用自己写的抓取框架做爬虫,还是系统的整理一下Scrapy相关的知识,做一个old school 的爬虫。爬虫的整个流程,就是发送网络请求,处理返回的内容两个过程。然后我们将这个流程细化;如何准备需要访问的链接,需要访问的链接应该是哪些链接;发送请求时我们带上什么,如何更快的发送更多请求;对返回的内容需要做哪些操作……不讲实例,只看实现。从Scrapy的源码来读Scrapy到底是如...
2019-04-02 20:12:36 6013
原创 Python装饰器之lru_cache
在流畅的Python里看到的,做一下笔记。在运行一些比较耗时的函数,如递归时重复计算相同参数的函数时。通过python自带的装饰器functools.lru_cache可以将函数结果保存起来,作为缓存在重复计算时直接返回结果。减少函数运行的时间。以斐波那契数列的递归为例,首先实现一个递归的斐波那契方法:def fib(n): if n < 2: return n...
2019-03-20 19:46:42 694
原创 Python的增量赋值
对于python来说,a=a+b 和a+=b的区别是什么。增量赋值运算符+=和*=的表现取决于第一个操作对象。实际上会调用对象的__iadd__和__imul__方法,当该方法未实现的时候会调用__add__和__mul__方法。而对于可变对象一般都实现了__iadd__和__imul__方法。所以对于不可变对象来说两种方式并没有区别,而可变对象的增量赋值则会在原地进行操作,因此图中的数组的内...
2019-03-19 17:19:14 999
原创 【爬虫】一道爬虫面试题
最近在群里看到老哥提到这题面试题,刚好有关js的混淆。自己撸一下思路怎么做。http://shaoq.com:7777/exam这里第一行的字除了python和题都是由css给span标签设置的style。直接对这个地址进行访问的话,返回的内容只是设置了5.5秒后进行了一次地址的重定向。并对cookie进行了一次设置所以可以通过session保存cookie后重复访问这一链接,但是...
2019-03-14 15:44:25 1210
原创 Python日志分级别输出到不同文件
思路:为logger设置2个handler,再对2个handler设置不同的filter进行日志过滤。通过supervisor管理项目时,会有stdout和stderr两种日志路径的设置方式,通过给一个logger设置2个StreamHandler后,分别对handler设置日志级别的过滤,实现日志的分级输出。import loggingimport syslog = logging.g...
2019-03-08 19:25:51 7649 1
原创 【supervisor】启动时报错Error: Another program is already listening on a port...
当启动supervisor时报错$ supervisord -c supervisord.confError: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before startin...
2019-02-27 16:44:57 3100
原创 【Redis】Redis持久化的两种方式
redis的两种持久化方式,快照和只追加文件(aof),快照保存数据,AOF保存每次执行的命令。配置文件中的dir 选项指定了快照文件和aof文件的保存位置。【快照】快照持久化的命令:bgsave和save,通过save命令执行时不会创建子线程争抢资源。配置文件:save 60 1000 #60s内1000次操作触发快照保存stop-writes-on-bgsave-error no...
2019-02-20 14:52:32 186
原创 【leetcode】662.二叉树最大宽度
https://leetcode-cn.com/problems/maximum-width-of-binary-tree/求一颗二叉树的最大宽度最开始用层级遍历的方式,记录一层的长度,将空节点的也放入队列中计算宽度,当二叉树过大时,会超出时间限制。原代码: def widthOfBinaryTree(self, root): """ :type ro...
2019-02-14 19:07:32 514
原创 Python对序列使用 * 需要注意的地方
以列表为例,在初始化列表的时候我们可以用 * 来复制元素。arr = [0]*3 #此时arr为[0,0,0]arr2 = [[0]]*3 #此时arr2为[[0],[0],[0]]此时arr和arr2中每个元素的内存地址都是相同的,又因为列表为Python中的可变对象。所以对arr2中的一个元素进行list操作时,会影响到其他元素。因此在使用*进行列表的初始化时需要注意列表中...
2019-02-13 10:56:31 337
原创 Python不可变的映射类型MappingProxyType
Python中的字典是可变的,当需要某个映射关系不能被修改时。可以通过MappingProxyType创建不可修改的映射实例。from types import MappingProxyTyped = {'a':1, 'b':2}d_view = MappingProxyType(d)当对d_view的键值进行修改时,会报错。...
2019-01-17 19:25:37 2571
原创 pyenv安装python版本BUILD FAILED
今天在一台服务器上安装python版本时,一直报错BUILD FAILED。这种情况可以下载python安装包后离线运行当pyenv install时会在.pyenv/cache文件夹下查看对应版本的Python安装包是否存在,因此可以按照先前的下载地址在该文件夹下加载好安装包。wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0...
2018-11-28 15:42:40 3082 2
原创 Fiddler抓部分app时网络连接失败
通过fiddler抓app时,在安装手机安装fiddler证书后,发现有的app可以正常联网,有的app连不上网,如知乎、微博。在Options-HTTPS 取消勾选Decrypt HTTPS traffic后一切正常。...
2018-11-08 16:07:16 16793 20
原创 Message: 'chromedriver' executable needs to be in PATH的处理
下载与chrome对应版本的chromedriver,解压后放入chrome的文件夹下,并将该路径添加到环境变量。如:C:\Program Files (x86)\Google\Chrome\Application下载地址添加环境变量后仍然没有用的情况下,将chromedriver 放入python解释器目录下。如虚拟环境下的venv/Scripts...
2018-10-26 16:29:12 484
原创 Python使用opencv 时 ImportError: DLL load failed: 找不到指定的模块
开发环境 windows7 + python3.6在安装opencv-python后导入cv2时报错ImportError: DLL load failed: 找不到指定的模块。网上的教程有下载Visual C++ Redistributable for Visual Studio 2015解决,有将python3.dll放入文件夹下解决,也有通过wheel文件进行下载的。尝试了这些方法后都...
2018-10-17 12:11:58 3155 1
原创 python简单的异步编程 concurrent.futures
concurrent.futures 简单的异步编程 自从知道了这个,已经忘了threading,multiprocessing怎么用。文档:https://pythonhosted.org/futures/简单的用法,首先Executor作为抽象类,而ThreadPoolExecutor和ProcessPoolExecutor为它的子类分别用来创建线程池和进程池。Executor三...
2018-09-06 12:47:36 478
原创 使用DataX进行数据同步
DataX 是一个异构数据源离线同步工具,可以实现数据源之间的数据同步。 ODPSWriter插件适合于TB,GB数量级的数据传输,如果需要传输PB量级的数据,可以选择dt task工具 ;工具下载下载DataX wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz解压DataX tar ...
2018-07-17 18:30:26 8541
原创 Pandas修改csv文件某一列的值
将本来存为 省名 城市名 的字段修改为只有城市名 1. 通过pandas读取csv文件 2. 获取某一列的值并进行类型转换 3. 通过apply方法中的匿名函数进行数据的处理 4. 输出到原始文件中import pandas as pddata = pd.read_csv('price.csv',encoding='utf-8', )data[u...
2018-07-11 16:52:27 51376 5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人