KevinHuang

KevinHuang的博客


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 一些书

  • 常用命令

  • python tips

  • 站点地图

  • rss

  • 公益404

  • 搜索

优秀开源项目kombu源码分析之可扩展的Transport

发表于 2016-02-01 | 分类于 python | 阅读次数:
Kombu里面使用Transport类来表示一个具体的消息代理(Broker),目前包含Redis、MongoDB、Zookeeper、Django、SQLAlchemy等类型。这种对不同类型实现相同接口的需求要求我们要设计成可扩展的方式。我之前写代码,习惯这么设计: 写一个基类Transport,定义还未实现的那些接口。 继承这个基类,实现对应的接口。 调用的时候通过一个带有别名和对应类的字典找到这个类。如果新加一种类型,就是实现这个类型的Transport,然后在对应关系的映射里面加在它。Kombu实现的更深入一些。今天我们分析下它是怎么实现的。首先Kombu也有一个基类Transport: 123456789101112131415from kombu.transport import base class Channel(AbstractChannel, base.StdChannel): # 队列和消息处理的逻辑 ... class Transport(base.Transport): Channel = Channel implements = base.Transport.implements.extend( exchange_type=frozenset(['direct', 'topic']), ... ) ... 这个base.Transport相当于预先定义了一些接口,相当于更加「基类」,这就不看了,权当这个Transport是各种消息代理的基类吧。我们看一下MongoDB类型的实现: 1234567891011121314151617from . import virtual class Channel(virtual. ...
阅读全文 »

使用tornado让你的请求异步非阻塞

发表于 2016-01-31 | 分类于 python | 阅读次数:
####前言也许有同学很迷惑:tornado不是标榜异步非阻塞解决10K问题的嘛?但是我却发现不是torando不好,而是你用错了.比如最近发现一个事情:某网站打开页面很慢,服务器cpu/内存都正常.网络状态也良好.后来发现,打开页面会有很多请求后端数据库的访问,有一个mongodb的数据库业务api的rest服务.但是它的tornado却用错了,一步步的来研究问题:####说明以下的例子都有2个url,一个是耗时的请求,一个是可以或者说需要立刻返回的请求,我想就算一个对技术不熟,从道理上来说的用户,他希望的是他访问的请求不会影响也不会被其他人的请求影响 123456789101112131415161718192021222324252627282930#!/bin/env python import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web import tornado.httpclient import time from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class SleepHandler(tornado.web.RequestHandler): def get(self): time.sleep(5) self.write("when i sleep 5s") class JustNowHandler(tornado.web.RequestHandler): def ...
阅读全文 »

聊聊python面试这件事儿

发表于 2016-01-30 | 分类于 python | 阅读次数:
前言今天在微博上被私信, 聊了好久的关于python面试的事情. 其实感觉蛮经常的和很多人在聊这个话题. 尤其是建了一个python学习交流群之后,群里讨论的, 私聊我的, 问的比较多的真的有python面试相关的.总结起来大概以下几种: python面试最常用的面试题有哪些? 某个面试题感觉回答的不好, 问怎么回答比较好. 有什么面试经验可以分享. 豆瓣面试一般问什么 - 我是不可能泄题的, 以后不要这么可爱了……突然觉得有必要专门聊聊python面试这件事儿. 随便分享下我的故事.工作了几年, 必然面过几家. 我不是面霸, 但是也肯定有感觉特别奇葩的, 没对上眼的, 完虐我的,励志的,让我感动的. 让我感恩的.来个趣事儿国内python圈有名的公司不多. 12年的时候觉得要从运维开发转型为真正的开发, 面试了某知名公司S. 一直到现在我还觉得他的面试模式很好 -初步筛选之后会发面试题, 2个题目任选其一, 一周做好. 当时python刚学会一年多, 反正蛮辛苦的还是做完了. 后来接到一面的电话.当时觉得他们的工作环境特别好, 想着能留下来该多好. 这个组的面试风格比较特别 - 三个组员一起来面试, 轮流问问题, 有技术的, 有个人兴趣的,有职业规划的. 为什么说这个呢? 这是我工作以来影响最深的面试, 甚至说对我未来影响很大,一直到现在我都非常感谢他们. 现在我每次面试其他人, 都要花的时间比较多, 希望挖掘更多的候选人的优点, 给更多的建议和帮助. 总是想起他们对我的建议.我们说了什么呢?我清楚的记得几个事情 看我简历学了熟悉django. 问我django请求到响应的流程. 没有回答上来. 其中一个面试官给我解释下流程. 问了一些python语法, 应用场景, 但是我大都没有深入了解, 事后我挨个查了这些知识点, 发现其实我只是学会了皮毛 无意间聊到了编辑器, 我 ...
阅读全文 »

选Python还是Java?

发表于 2016-01-29 | 分类于 python | 阅读次数:
抱歉啦,整个9月都在充电和赶进度。好久不冒泡了,今天还有订阅的同学给我发了句淡淡的「好久没更新了」来催更,所以今天先「水」一篇非技术的吧。知乎上有很多关于语言选择的问题,这已经是月经贴了。其中关于Python和Java的问题大抵如下: Python和Java该如何选择 ? 将来Python(Java)会不会替代Java(Python) ? 零基础应该选择学习Python还是Java ? 做web开发,用Python好还是Java好呢?这类问题过一段时间就得来一波,今天我就以这个为切入点和大家唠唠。我为啥要说这个话题?相信你们最近又看到一波「夸」Python的文章,引用了一些国外的数据,无非说Python现在很火,薪资很高,是未来的趋势balabala…不过我们要关注下带节奏的是谁:A: 培训机构营销号他们说的话可以信?那么Python在国内的发展情况如何?注:此文发布时间为 2017-09-28我最近4-5年是一个靠Python吃饭的一线开发者。在我认知里面,Python既是一个大众化的语言,也是一小搓儿开发者喜欢的语言。怎么说呢?每个开发者都应该学学Python这个胶水语言,后端开发者不会Python都不好意思出门和别人打招呼。事实上基本在每个公司都有Python的身影,只不过公司的核心业务、用户产品很少用Python来做。国内大一点的、使用Python做基础设施的公司1只手就可以数出来:豆瓣、知乎、美团、饿了么、搜狐(漏掉的欢迎补充)。公司级别把Python作为核心的公司屈指可数,它更像是一波有「特殊」感情开发者的选择,这波人品味很挑剔,这个有点难描述,参照Pythonic这个词希望你成为的开发者吧。Python在国外环境要好得多,但是在国内一直在缓慢的赢得更多人的心,在我的感觉里还有点「病态」发展(这个就不展开了),增速是可预期的,不会出现井喷式的增长。职位就是那么 ...
阅读全文 »

Python正则备忘单

发表于 2016-01-28 | 分类于 python | 阅读次数:
学习正则的第一个教程应该去看<正则表达式30分钟入门教程>,学会里面的内容就足够满足大部分的工作需要了。而对于Python来说,就要学习模块re的使用方法。文本将展示一些大家都应该掌握的技巧。 编译正则对象re.compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。用法上略有区别,举个例子,匹配一个字符串可用如下方式: 12re.match(r'hello \w+', 'hello world') # re.match(pattern, string, flags=0) 如果使用compile,将变成: 123regex = re.compile(r'hello \w+') regex.match('hello world') 为什么要这么用呢?其实就是为了提高正则匹配的速度,重复利用正则表达式对象。我们对比一下2种方式的效率: 12345678In : timeit -n 10000 re.match(r'hello \w+', 'hello world') 10000 loops, best of 3: 2.06 µs per loop In : regex = re.compile(r'hello \w+') In : timeit -n 10000 regex.match('hello world') 10000 loops, best of 3: 927 ns per loop 可以看到第二种方式要快很多。在实际的工作中你会发现越多的使用编译好的正则表达式对象,效果就越好。 分组(group)你可能已经见过对匹配的内容进行分组的用法了: 1234567891011In : match = re.match(r'hello (\w+)', 'hello ...
阅读全文 »

知乎Live全文搜索之微信小程序实战(一)

发表于 2016-01-27 | 分类于 python | 阅读次数:
首先感受下效果:![](https://github.com/dongweiming/weapp-zhihulive/raw/master/screenshot/zhihulive.png)项目地址 https://github.com/dongweiming/weapp-zhihulive限于公众号文章篇幅的限制,只能将具体的小程序代码实战和我的经验放在下篇了。今天我先介绍下我对小程序的一些理解以及用尽量少的篇幅介绍小程序背后的技术的发展历程。 我对小程序的看法我一向不喜欢跟风。小程序刚出的时候一大波人吹捧,一个月后一大堆人看衰,全然忘记曾经的话,其实脸被打的是啪啪啪。引用我点过赞的一个对于小程序发布一个月的表现如何的大司马大将军的回答: 互联网时代,人们更加没有耐心——没耐心到以至于30天时间,就有人开始对小程序“盖棺定论”了。这真是一件让人悲哀的不知道该说啥的事。具体的回答内容限于篇幅就不展开了。当我真正的用它开发,实践了产品需求。我对它持观察态度: 生态太过封闭。微信想的是用户不断的进行「手机开机 —> 微信 —> (社交+购物+吃饭+金融…) —> 手机关机」的循环,但是别的公司想的是「微信 —> 小程序 —> 获得粉丝 —> 引流或者引导用户下载APP感受完整版」,大家各怀鬼胎,但是谁都不蠢。 相关限制太多(分享按钮、诱导分享)。 入口不好找。期待小程序的下一步。页面设计思路术业有专攻,我有个缺点,就是设计页面会懵…如果没有设计图让我凭空去想我很痛苦,比如这个小程序,我一开始是按着知乎APP的配色和Live相关内容的布局做的,但是越到后来越发现效果我不喜欢。现在的主色、发现页、话题页是抄袭了<https://github.com/romoo/weapp-demo-breadtrip> 的感觉,加上了一些我的理 ...
阅读全文 »

vary.vim-自动去掉行尾空格

发表于 2016-01-26 | 分类于 python | 阅读次数:
####前言一直想改成emacs无奈工作需要效率,所以vim还没有完全放弃. 我想做python的同学很可能有我一样的困扰: 在维护别人的代码的时候发现有很多tab和空格混用或者行尾空格没有删除我以前可能没有注意这个问题,就是自觉的使用ed模式: :%s/\s+$//g和:retab,最近老大的一句话提醒了我:他问我是否vim可以配置成自动模式? 以我对vim的了解它肯定不会介入个人的编辑,那么可能就要使用hook的方法.这也就是我的vary.vim的原理:当保存文件的时候(:w)自动执行命令.其实我想你可能会问,为啥是我保存的时候而不是打开的时候呢?额 下面会讲到####安装配置请看项目的README安装后就算不配置默认只对python语言生效-团队和语言风格不同####修改我的vim插件我一直在想究竟哪种方式更合理(打开文件就修改还是保存的时候再修改),我默认是保存,但是其实你可以修改我的autocmd命令为: 123autocmd BufReadPost * :call StripTrailingWhite() autocmd BufReadPost * :call RetabIndents() 表示打开文件之前就修改,把修改后的结果呈现给你 版权声明:本文由 董伟明 原创,未经作者授权禁止任何微信公众号和向掘金(juejin.im)转载,技术博客转载采用 保留署名-非商业性使用-禁止演绎 4.0-国际许可协议python
阅读全文 »

r-上传文件服务

发表于 2016-01-25 | 分类于 python | 阅读次数:
前言豆瓣内部有一些基础设施我认为做得都很好, 比如bridge和p. 一是身为用户的体验, 一个是我以开发的角度会去想我能不能做的更好.这些基础设施凝聚了豆瓣早期的工程师文化的精髓, 至今还在影响着每个豆瓣的工程师.今天我们聊到的是p - 一个文件上传托管服务, 一个被严重低估了的工具,它已经被清风老师拆分出来不需要跑在dae上.而我今天推荐的就是我用react+es6plus+webpack重写的版本 r为什么说我认为被低估呢? 目前star也才五十几. 当时开始用p. 我对效果非常惊艳.如果你很好奇是不是也会这么认为. 可以先看个heroku的[demo](https://vast-brushlands-4477.herokuapp.com/). 因为连接了heroku的远程cleardb(mysql的封装), 上传反映略慢.而本地会很流畅. 主要看效果吧. r的用途身在互联网工作, 会经常有这样的需求 希望上传后的文件(包含图片)可以被永久存放. 想在github(CODE)上, 能方便的引用一些bug截图(甚至在多个地方引用). 希望上传的文件(包含图片), 能有一个比较好的预览页(包含文件大小, 文件类型, 上传时间等), 下载地址, 也能生成短链接, 二维码 希望能对某上传的图片传一些参数做对应的缩放和剪切 身在互联网, 页面太low, 效果不炫, 作为工程师, 用起来是会有抵制心情的.对. r(p) 就可以做这些事.用到的其他技术Flask, SQLAlchemy, Mako, Pillow 版权声明:本文由 董伟明 原创,未经作者授权禁止任何微信公众号和向掘金(juejin.im)转载,技术博客转载采用 保留署名-非商业性使用-禁止演绎 4.0-国际许可协议python
阅读全文 »

知乎Live全文搜索之微信小程序实战(一)

发表于 2016-01-24 | 分类于 python | 阅读次数:
首先感受下效果:![](https://github.com/dongweiming/weapp-zhihulive/raw/master/screenshot/zhihulive.png)项目地址 https://github.com/dongweiming/weapp-zhihulive 我对小程序的看法我一向不喜欢跟风。小程序刚出的时候一大波人吹捧,一个月后一大堆人看衰,全然忘记曾经的话,其实脸被打的是啪啪啪。当我真正的用它开发,实践了产品需求。现在我还是对它持观察态度: 整体太过封闭。微信想的是用户不断的进行「手机开机 —> 微信 —> (社交+购物+吃饭+金融…) —> 手机关机」的循环,但是别的公司想的是「微信 —> 小程序 —> 获得粉丝 —> 引流或者引导用户下载APP感受完整版」,大家各怀鬼胎,但是谁都不蠢。 相关限制太多(分享按钮、诱导分享)。 入口太深。搜索和使用小程序目前看是不小的门槛。但引用我点过赞的一个对于小程序发布一个月的表现如何的大司马大将军回答: 互联网时代,人们更加没有耐心——没耐心到以至于30天时间,就有人开始对小程序“盖棺定论”了。这真是一件让人悲哀的不知道该说啥的事。具体的回答内容限于篇幅就不展开了。期待小程序的下一步。 页面设计思路术业有专攻,我有个缺点,就是设计页面会懵…如果没有设计图让我凭空去想我很痛苦,比如这个小程序,我一开始是按着知乎APP的配色和Live相关内容的布局做的,但是越到后来越发现效果我不喜欢。现在的主色、发现页、话题页是抄袭了<https://github.com/romoo/weapp-demo-breadtrip的感觉,加上了一些我的理解。其他的页面是我自己对Live产品的理解做的。>小程序完成的功能我之前在我的知乎Live以及回答的一些问题中都提到过, ...
阅读全文 »

仿slid.es的在线PPT编辑网站

发表于 2016-01-23 | 分类于 python | 阅读次数:
####前言slid.es是我最喜欢的前端之一hakimel的作品,前身叫做rvl.io,网站已经改版。源于去年年底在上家公司做年终总结PPT,对我这种不搞office,没有美感的小程序员太痛苦了,然后就找到了reveal.js,后来萌发做个基于它的网站, 其实也是为了练手学习mongoengine和oauth项目地址 flask_reveal####它能做什么 保存漂亮的在线PPT(我认为的) 记录浏览次数 多种主题和字体 可以把PPT私有化(默认是公开的) 自动保存修改 支持Bitbucket/Google/Github/Instagram/Linkdln/Trello/Tumblr/Stackoverflow oauth/oauth2登陆 PPT预览####使用了什么 flask mongoengine (忍不了非orm) flask-script (像django那样的命令行启动) 前端js借用我做喜欢的原作者的90%,然后根据我的需要改动,css基本没动 python-social-auth的oauth后端,但是它使用的是flask+sqlalchemy,不支持flask+mongoengine,我改写了这部分####Usage设置hosts文件唉,本来申请了很多oauth想放在sae上面,但是遗憾的是新浪不支持,所以只能本地加hosts,让验证后的回调正确返回 linux在你的/etc/hosts 文件里面添加一行 12YOURIP YOURDOMAIN 复制配置文件然后把你注册的ouauth放进去 12cp settings.py.example settings.py 象django那样启动 12python manage.py runserver -t 0.0.0.0 -p 80 And 访问主页http://revealcn.sina ...
阅读全文 »
1…17181920
Kevin Huang

Kevin Huang

197 日志
24 分类
84 标签
RSS
E-Mail
友情链接
  • 董伟明
  • FOOFISH
  • 酷壳
  • 知道创宇
  • 阮一峰
  • 求索
  • Sdandroid
  • 全栈实验室
© 2023 Kevin Huang 豫ICP备16018730号-1
本站访客数 人次 本站总访问量 次