-
基于asyncio实现的异步协程爬虫
前言以下内容是看500 lines or less中 A Web Crawler With asyncio Coroutines这个章节后做的一些记录。一个最简单的爬虫一个非常简单的get请求,爬取获取xkcd.com,import socketdef crawl(): sock = socket.socket() sock.connect(('xkcd.com', 80)) request = 'GET / HTTP/1.0\r\nHost: xkcd.com\r\n\...…
-
kubernetes中部署spark集群
在写这个的时候,spark版本为2.2.1。基于kubernetes部署的两种方式 直接使用kubernetes作为集群管理器(Cluster Manager),类似与mesos和yarn,使用方式可以看running-on-kubernetes。但是这个部署方式,一是还不成熟,不推荐在生产环境使用。第二是要求k8s版本大于1.6,但我这边版本1.5.1,线上在用,不太想升级,而spark只是想搭起来玩玩… 第二种方式是standalone的方式,即便是不用集群也能很方便的用sbin下...…
-
优雅关闭以及机器kubernetes pods
优雅启动很常见的一个场景,一个服务刚启动,可能会有一堆东西要加载(比如我这边需要读数据库中一堆东西)需要一些时间,而这段时间里,我不希望kubernetes 把请求打到这些还没初始化的pod上。kubernetes提供了一个叫探针的东西,可以用来检测pod是否就绪,只有就绪的情况才会把请求打过来,如果非就绪状态,这些pod会从service的load balancer中暂时移除。探针可以是一个command或者是一个HTTP的请求,这边使用的是一个HTTP请求的形式。需要保证程序在正常情况...…
-
一种神奇的批量创建类的方法--参照namedtuple
def namedtuple(typename, field_names, verbose=False, rename=False): """Returns a new subclass of tuple with named fields.namedtuple是一个很神奇的东西,在看kafka-python的时候看到了很多地方用到了这玩意。用法也非常简单from collections import namedtuplePeople = namedtuple(typename="peo...…
-
kafka-python 获取topic lag值
说真,这个问题看上去很简单,但“得益”与kafka-python神奇的文档,真的不算简单,反正我是搜了半天还看了半天源码。直接上代码吧from kafka import SimpleClient, KafkaConsumerfrom kafka.common import OffsetRequestPayload, TopicPartitiondef get_topic_offset(brokers, topic): """ 获取一个topic的offset值的和 """...…
-
python随笔 Mock vs MagicMock
首先,从现象上看,Mock有的MagicMock都有,而MagicMock多了一些magic方法。_mock = mock.Mock()_magicmock = mock.MagicMock()mock.__iter__ # error_magicmock.__iter__ #<MagicMock name='mock.__iter__' id='4458398224'>而且MagicMock是懒加载的,在没调用magic方法的时候,是不存在这个方法的。>>>...…
-
timelion一些基本表达式
一开始看到Kibana中自带了个叫timelion的东西,感觉很神奇,为什么有了kibana之前的一些展现数据的图了(如柱状图,折线图等)还需要timelion嘞? Timelion is a time series data visualizer that enables you to combine totally independent data sources within a single visualization. It’s driven by a simple expre...…
-
chrome抓包websocket frame为空
尝试抓websocket的包,遇上一个奇葩的问题,分享下。测试网站如下http://websocket.org/echo.htmlchrome抓websocket的包很简单 打开http://websocket.org/echo.html connect ,send,可以在前端看到输出 打开chrome开发者工具,可以看到已经有websocket的连接然而…啥都没有…很迷,看了许久,搜了很多地方,换了电脑,升级了最新版本,依旧啥都没有…终于,在StackOverflow 上找到了靠谱...…
-
phash计算png图片指纹返回总为0
今天在用phash做线上封面图去重,之前自己开发机mac上有个用port install phash安装的phash,源码是phash.org中提供的c++版本的,没遇到啥问题。今天打算用docker包一下放服务器上跑,发现了个有趣的现象,所有的png图片计算出来的指纹都是0。In [214]: lib = ctypes.CDLL(find_library('pHash'), use_errno=True)In [215]: phash = ctypes.c_uint64()In [216...…
-
python实现redis三种cas操作
cas全称是compare and set,是一种典型的事务操作,本文会介绍三种redis实现cas事务的方法,并会解决下面的虚拟问题:维护一个值,如果这个值小于当前时间,则设置为当前时间;如果这个值大于当前时间,则设置为当前时间+30。简单的单线程环境下代码如下:# 初始化r = redis.Redis()if not r.exists("key_test"): r.set("key_test", 0)def inc(): count = int(r.get('key_tes...…