KevinHuang

KevinHuang的博客


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 一些书

  • 常用命令

  • python tips

  • 站点地图

  • rss

  • 公益404

  • 搜索

python进阶必读汇总

发表于 2016-05-03 | 分类于 python | 阅读次数:
前言昨天翻到了一本在github开源的书: IntermediatePython. 就有了此文,梳理了一下一些之前翻到的对python语言细节点的答案, 博文等. 英文的superPython’s super() consideredsuper!rhettinger是python核心开发者. 这篇博文也是讲super最好最深入的博文了. 装饰器[Understanding PythonDecorators](http://stackoverflow.com/questions/739654/how-can-i-make-a-chain-of-function-decorators-in-python/1594484#1594484)如果你还没有经常性的用装饰器, 你就要思考你的工作需求是不是的太简单了, 或者该考虑下这种AOP模式的开发的作用了 元类[What is a metaclass inPython?](http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python/6581949#6581949)Metaclasses Demystified元类是python高阶语法. 合理的使用可以减少大量重复性的代码. 防御性编程中的LBYL和EAFP[Try/catch or validation forspeed?](http://stackoverflow.com/questions/5589532/try-catch-or-validation-for-speed/)这其实就是事先检查和异常处理2个方式的讨论 new 和 init[Python (and Python C API): new versusinit](http://stackoverflow.com/questions/48 ...
阅读全文 »

使用celery之怎么让celery跑起来

发表于 2016-05-02 | 分类于 python | 阅读次数:
####前言自从发了上次的文章[使用celery之深入celery配置](http://www.dongwm.com/archives/shi-yong-celeryzhi-shen-ru-celerypei-zhi/),有一些网友再问我怎么让celery跑起来. 其实说来也是,celery在新手眼里真的是比较重量级,不好懂,今天先让他跑起来吧本文大部分代码和使用方法都可以在celery官网看到####我想要的效果我想实现一个定时任务, 每3个小时的12分启动,假如是定时任务大概是这样的: 1212 */3 * * * python /where/is/the/path/that.py ####选择MQ使用消息队列其实就是为了给任务一个时序,保证任务消息不丢失,想想你的一个任务是关乎公司核心业务,犹豫某种原因失败或者丢失怎么办?celery就需要这个消息的存储,我这里还是选择rabbitmq mongodb,redis都无所谓 只是存储的位置的问题.选择其他的工具没有远程控制和监控写法就是: 12BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/vhost' 其中可以这样解析 12amqp://user:password@hostname:port/vhost vhost是命名空间,就像网站的子域名,在这里由于权限控制我们需要先创建账号和密码 1234$ rabbitmqctl add_user myuser mypassword $ rabbitmqctl add_vhost myvhost $ rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*" 编写tasks.py脚本12345678from celery import C ...
阅读全文 »

使用Github_webhook服务实现提PR自动检查Flake8并在对应位置发评论

发表于 2016-05-01 | 分类于 python | 阅读次数:
最近参考linty_fresh实现了一个webhook服务,提PR自动检查Flake8, 当有代码风格问题的时候,并在对应位置发评论项目地址是: gandalf在公司内的Github企业版上, 已经用了一段时间, 比较稳定. 现在开源出来, 有兴趣的可以拿去^.^这个项目也是我的学习asyncio的练手作品, 吐槽下TypeHints让代码显的好丑哇… 项目知识点 Python3: 项目需要使用Python3, 建议使用Python3.5 rq: 工作中有一些项目的版本库很大, 实际的检查时间也会长一些, 为了保证应用解耦和更好的提供支持, 使用rq作为任务队列 aiohttp: 基于asyncio的http库, 用来调用github api, 获取对应pr信息 pygit2: 使用官方模块实现Python版本的git版本控制功能, 它的安装比较麻烦, 但是官方文档讲的很清楚 Flask: 作为webhook的服务框架来几张截图看个效果:配置 123456789101112131415161718❯ cat gandalf/config.py WORK_DIR = '/tmp/repositories' # 设定克隆的项目版本库代码存放位置 FLAKE8_EXECUTABLE = '/usr/local/bin/flake8' # 这个项目时Python3的,但是目前大部分应用还是Python2的, 所以需要Python2版本的flake8 HOST = '0.0.0.0' PORT = 8080 DEBUG = False REPORT_NO_MATCHING = False # 没有在diff列表的文件的错误是否也报告 GITHUB_URL = 'http://github.com/' # 行尾要加反斜杠 GITHUB_API_URL = 'h ...
阅读全文 »

最近在写一本Python_Web开发的书

发表于 2016-04-30 | 分类于 python | 阅读次数:
应某出版社约, 最近一直在写一本Python Web开发的书. 暂时不发大纲全部的章节,主要涵盖如下方面的内容: 使用Python从零开始做一个完善的项目 源码级别分析产品过程中的各种知识点 站在运维,运维开发的角度讲解现在互联网Web应用的的方方面面 排错, 优化, 设计项目等我清晰的知道都写些什么, 但是担心最后遗漏读者们有兴趣,关心的一些方面的内容, 特写本文. 本博客的读者如果有想法和建议, 欢迎和我交流. 版权声明:本文由 董伟明 原创,未经作者授权禁止任何微信公众号和向掘金(juejin.im)转载,技术博客转载采用 保留署名-非商业性使用-禁止演绎 4.0-国际许可协议python
阅读全文 »

使用celery之了解celery

发表于 2016-04-29 | 分类于 python | 阅读次数:
####前言我想很多做开发和运维的都会涉及一件事:crontab, 也就是在服务器上设定定时任务,按期执行一些任务.但是假如你有上千台的服务器,你有上千种任务,那么对于这个定时任务的管理恐怕是一件很头疼的事情.哪怕你只是几十个任务分配的不同的机器上怎么样合理的管理和实现以下功能呢: 查看定时任务的执行情况.比如执行是否成功,当前状态,执行花费的时间. 一个友好的界面或者命令行下实现添加,删除任务 怎么样简单实现不同的机器设定不同种任务,某些机器执行不同的队列 假如你需要生成一个任务怎么样不阻塞剩下来的过程(异步了呗) 怎么样并发的执行任务####几种选择 有钱有人有时间自己实现一套,优点是完全符合公司业务的需要,有专门的团队维护和服务 使用Gearman,听说过没用过,因为是C/java/perl,对我们这种python开发者或者运维来说,假如没有这方面经验之后没有能力了解底层实现和二次开发的能力 使用rq, rq是搞gitflow的那个作者写的,简介里面说的很清楚:Simple job queues for Python. 怕它不够复杂,但是假如业务没有那么复杂或者应用不是那么严格,完全可以尝试下 好吧我选择了celery, 现在用了快半年,可能是历史遗留问题,版本较低.有很多坑.但是很不错####消息队列RabbitMQ,ZeroMQ这样的消息队列总是出现在我们视线中, 其实意义是很简单:消息就是一个要传送的数据,celery是一个分布式的任务队列.这个”任务”其实就是一种消息,任务被生成到队列中,被RabbitMQ等容器接收和存储,在适当的时候又被要执行的机器把这个消息取走.celery任务可以使用RabbitMQ/Redis/SQLAlchemy/Django的orm/Mongodb等等容器(这里叫做Broker).我使用的是RabbitMQ,因为作者在githu ...
阅读全文 »

线程锁的一个大坑

发表于 2016-04-28 | 分类于 python | 阅读次数:
前言原来的一位同事@炮哥, 昨天在QQ问我:“想请教下一个线程获得lock之后,也可能被其他的线程释放掉?这个是因为线程之间的资源是共享的吗?这样的话普通的thread lock 都是不安全的了?”.我第一反应就是怎么可能:’谁加锁谁解锁呗,别的线程怎么能解锁?’炮哥发来一段python官网的文档说明: 12A factory function that returns a new primitive lock object. Once a thread has acquired it, subsequent attempts to acquire it block, until it is released; any thread may release it. 最有最后一句前是分号. 简单地说,一个线程获取锁, 以后的尝试获取都会被阻塞,除非它会释放. 但是 同时 其他其他线程可以释放好,写个例子验证下: 12345678910111213141516171819202122232425262728293031import threading import time lock = threading.Lock() def lock_holder(lock): print('Starting') while True: lock.acquire() print('Holding') time.sleep(100) print('Sleep done') def lock_release(lock): time.sleep(1) # 保证顺序 lock.release() print('Release it') hold ...
阅读全文 »

一个使用python的web程序员的emacs.d

发表于 2016-04-27 | 分类于 python | 阅读次数:
前言越来越多的人使用emacs作为开发工具. 甚至skype,gmail,豆瓣FM都能通过emacs.作为一个产品开发,肯定使用很多插件,设置一些快捷键来提高开发效率.以前一直使用prelude,很久之后发现有以下问题: 比如开启python语言支持需要在prelude-modules.el里面把python这样的注释去掉 我不需要支持这么多的语言,也不需要那么多快捷键 aotupair实在太难用了 scss/css模式不好自定义缩进空格数, tab和空格混用. 不好定制 看过源码后发现,其实很来很简单粗暴的事情弄得有点复杂了我造了个轮子.emacs.d,主要针对python和web开发####Update2014-09-28, 经过这一个月的继续研究,已经有了很大的改变项目目录结构 12345678910111213141516171819202122├── Cask ; 我使用[cask](https://github.com/cask/cask)做包管理工具 ├── auto-insert ; 使用auto-insert设置新增elisp/python文件自动添加基于yasnippet的模板 │   ├── elisp-auto-insert │   └── python-auto-insert ├── custom ; 自定义插件目录,你也可以把你写的程序放进来然后在init.el里面require │   ├── flycheck.el ; 定制flycheck,让它在保存python程序时自动执行pep8和flake8,有问题的条目会打开新的buffer打印出来 │   └── py-autopep8.el ; 我自己实现了autopep8插件,保存时自动根据pep8标准处理文件 ├── functions.el ; 用到的相关函数 ├── ...
阅读全文 »

使用Python进行并发编程-asyncio篇(三)

发表于 2016-04-26 | 分类于 python | 阅读次数:
这是「使用Python进行并发编程」系列的最后一篇。我特意地把它安排在了16年最后一天,先祝各位元旦快乐。 重新实验上篇的效率对比的实现在第一篇我们曾经对比并发执行的效率,但是请求的是httpbin.org这个网站。很容易受到网络状态和其服务质量的影响。所以我考虑启用一个本地的eb服务。那接下来选方案吧。我用sanic提供的不同方案的例子,对tornado、aiohttp+ujson+uvloop、sanic+uvloop三种方案,在最新的Python3.6下,使用wrk进行了性能测试。先解释下上面提到的几个关键词: aiohttp。一个实现了PEP3156的HTTP的服务器,且包含客户端相关功能。最早出现,应该最知名。 sanic。后起之秀,基于Flask语法的异步Web框架。 uvloop。用Cython编写的、用来替代asyncio事件循环。作者说「它在速度上至少比Node.js、gevent以及其它任何Python异步框架快2倍」。 ujson。比标准库json及其社区版的simplejson都要快的JSON编解码库。使用的测试命令是: 12wrk -d20s -t10 -c200 http://127.0.0.1:8000 表示使用10个线程、并发200、持续20秒。在我个人Mac上获得的结果是:方案 | tornado | aiohttp + ujson + uvloop | sanic + uvloop 123456789101112131415161718192021222324平均延时 | 122.58ms | 35.49ms | 11.03ms 请求数/秒 | 162.94 | 566.87 | 2.02k 所以简单的返回json数据,看起来sanic + uvloop是最快的。首先我对市面的各种Benchmark的对比是非常反感的,不 ...
阅读全文 »

分享ipython-notebook

发表于 2016-04-25 | 分类于 python | 阅读次数:
前言本来准备下一次的Bpug(北京python用户组)的活动上准备做这个分享. 搁置了. 有兴趣组织纯技术活动的公司或者组织可以联系我.有兴趣的同学可以前往(我也会把录像地址放到网站的).提前给大家做一些预告. 其实ppt早就放到slideshare上了,地址是http://www.slideshare.net/dongweiming/ipython-notebook-43211257.也可以从[github下载](https://github.com/dongweiming/divingintoipynb/blob/master/ipython-notebook.pdf)对应的代码在divingintoipynb.Youtube在线看: https://www.youtube.com/watch?v=qMcKp8gFAYA 大纲 豆瓣东西双11临时后台 - 想看效果么? 看下面 把ipython notebook转换成html或者其他格式以及它的原理 我写的一个缩小版的nbviewer: Ipynb-viewer, 直接在ipython目录启动web服务 nbconvert原理 用ipynb写blog(pelican/nikola) 效果可见divingintoipynb_pelican和divingintoipynb_nikola还会讲到pelican转换ipynb到html插件,使用fabric: new_post, edit,import_ipynb.我也给nikola贡献了import ipynb功能. ipython notebook用到得第三方库和组件 Rich display system 现有的扩展, 演示. 我自己写的一个扩展. 演示, 代码分析 定制ipython notebook的键位. 使用emacs键位. 设计一个新的功能 - 弹出一个dialo ...
阅读全文 »

推荐pre-commit/pre-push:本地在commit或者push的时候做各种检查(pep8/pylint/pyflakes8)

发表于 2016-04-24 | 分类于 python | 阅读次数:
前言使用git的同学想必都有这样的工作场景-保证生产环境的ci不挂.也就是检查python是否符合pep8/csslint/jslint/pylint/pyflake8等.我在我的emacs配置中加入了这一项[py-autopep8](https://github.com/dongweiming/emacs.d/blob/master/custom/py-autopep8.el),就是在保存缓存区的时候把当前缓存区的文本放到一个临时文件, 然后执行autopep8, 再检查pep8/flake8但是不能对css/js/html做规范检查. 而且也不通用. 周末看到了Yelp的[pre-commit](https://github.com/pre-commit/pre-commit).感觉是个很有意思的东西,虽然之前也写过类似的hook. 但是没有它灵活. 看完他的源码后, 我今天给大家介绍下这个东西 pre-commit玩过svn/git的同学应该都知道他们有各种的hook. 也就是准备/完成什么事件的时候做些额外的工作. 一般是shell脚本,版本控制工具会判断脚本的退出码, 如果不是0, 就不会继续完成. pre-commit顾名思义就是在commit之前做的准备, 也就是每次执行 12git commit -m 'xxx' 的时候去做一些检查. 启用的插件都放到这个版本库目录的根目录下, 名字叫做.pre-commit-config.yaml -> 详细文档请看:http://pre-commit.com/这里有我的一个配置例子: 123456789101112131415161718192021222324- repo: https://github.com/pre-commit/pre-commit-hooks sha: b03733bc8 ...
阅读全文 »
1…8910…20
Kevin Huang

Kevin Huang

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