KevinHuang

KevinHuang的博客


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 一些书

  • 常用命令

  • python tips

  • 站点地图

  • rss

  • 公益404

  • 搜索

ipython的一些高级用法(二)

发表于 2016-03-23 | 分类于 python | 阅读次数:
今天我们学习下写ipython的magic命令. 好, magic是什么? 它是ipython自带的一些扩展命令, 类似%history,%prun, %logstart..想查看全部的magic可以使用ismagic, 列出可用的全部magics 12%lsmagic magic分为2类: line magic: 一些功能命令 cell magic: 主要是渲染ipython notebook页面效果以及执行某语言的代码idb - python db.py shellextensionidb是我最近写的一个magic.主要是给ipython提供db.py的接口,我们直接分析代码(我只截取有代表性的一段): 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586import os.path from functools import wraps from operator import attrgetter from urlparse import urlparse from db import DB # db.py提供的接口 from IPython.core.magic import Magics, magics_class, line_magic # 这三个就是我们需要做magic插件的组件 def get_or_none(attr): return attr if attr else None def check_db(func): @w ...
阅读全文 »

不可错过的Python技术博客(网站)

发表于 2016-03-22 | 分类于 python | 阅读次数:
在日常的工作和学习的过程中,会积累一些好的技术资源,也会把一些准备学习和深入的技术文章放进浏览器书签,不知道大家什么感觉,我的书签内容是越积越多 ㄟ( ▔,▔ )ㄏ。其实一段时间后有些会失去兴趣,有些已经掌握,有些确实看过了但是忘记从书签中删掉或者挪走,所以我有一个习惯,就是每过一段时间会清理一次。熟悉我的人都知道我对于学习的观点是: 先看书,了解语法和语言的基本理论 写代码去实践 看博客吸收别人的观点看博客文章,应该看如下三类的内容: 实际工作中的实践和经验 Python使用经验和技巧 对Python实现的分析和理解 介绍先进的思想、框架、库甚至生态我岔个题,看再多的爬虫代码和文章对学好Python益处很有限,甚至有害。从我使用Python写程序开始,看一些博客网站已经算是我每周甚至每天必做的一件事了,从这些资源里面获得的经验和收获实在太多了。今天一狠心清理了一些国外Python开发者的博客资源。想起来在知乎和微信公众号中有很多同学问过我平时关注那些博客或者技术来源,虽然我在知乎回答过一些问题,不过都没有本文吐血整理的资源多且全面。曾经看过那些曾经看过现在不再看的博客,原因主要是2点: 随着我对Python语言越来越熟悉,经验越来越丰富,我不再是它的受众了。不过对于很多同学来说,这些博客依然非常有意义,比国内一些微信公众号和技术博客的野鸡文章强的太多了,我经常感慨幸好我当时学习的环境比现在纯粹和踏实。 博主已经不再更新了,之前的内容也都看过,重复看没收获。不再更新确实很遗憾😔,真希望他们继续更新。回到正题,开始列啦: www.pydanny.com。博主是《Two Scoops of Django》的作者,我在Twitter上关注最早的开发者之一(我的Twitter被盗了,现在不玩了)。博客里面很多Python技巧,另外在Django方面作者贡献了非常多的内容和开源项 ...
阅读全文 »

给初学python设计模式的pythonista

发表于 2016-03-21 | 分类于 python | 阅读次数:
####前言从2011年5月4日买了第一本《python学习手册》到现在,我学python已经2年多了,python也是我第一门除bash外的语言。学’设计模式’这么神秘的东西还是源于去年一次面试,在我说了我想做某个东西,然后有什么思路后,面试官很不屑的问我:你知道设计模式嘛?然后我就懵了-从来没听过。我特别赞赏提供良好扩展功能的项目,比如Sublime Text2,它提供第三方插件功能,你可以使用别人开发的插件,也可以自己写插件,让项目更好的维护和扩展而不需要动基础的代码。后来换工作一直在熟悉业务,学一些东西。但是我一直记得这个’设计模式’,上个月花了一些时间去了解,所以有了此文,假如你也想了解’设计模式’,也很怕它,你会python,希望本文带给你帮助我也写了一组python设计模式的文章: 小明明s Github -设计模式####我的角度GoF(“四人帮”,又称Gang of Four,即Erich Gamma, Richard Helm, Ralph Johnson & JohnVlissides四人)的《设计模式》这本书我没看过,我也不怎么会java,看不懂例子.我没有受到其他语言的毒害(因为python是我一开始的语言),我的角度应该是最靠近python####什么是设计模式设计模式其实是一些被很多人反复使用而总结出来的代码设计经验,这些技术被GOF在大概20年前编辑成《编程模式》,其实不要害怕,因为 设计模式就在你写代码过程中已经体现了,被叫做’设计模式’只是被很好的总结出来 ,####python程序员的成长 当你初学python,可能还是翻阅手册或者去google出一些你想要问题的答案,而后举一反三修改它符合你想要的东西。那么这是阶段一:堆代码,这个时候主要是为了实现功能,不重视代码编码规范,代码运行效率,代码可读性等 用过一段时间python ...
阅读全文 »

用python跑mapreduce

发表于 2016-03-20 | 分类于 python | 阅读次数:
####前言mapreduce在我的理解里一直都是java等语言的专利,介于python乃至于pypy的性能局限,一直没想过用python写分布式任务,最多就是多workers从消息队列取任务执行这样,但是最近一件事真的颠覆了我对python的认识.####先说说起因某天分享[sed和awk](http://www.dongwm.com/archives/sed-and-awk/),领导突发奇想让我用一些顾问的实际工作需要去我们的大量数据里面获取想要的数据的需求作为一些演示的例子.其中有这样一个需求(我去掉实际一些专业晦涩的用语,用实际的内容来表达): 需求12341. 有大量的gz压缩文件, 找到其中某2天的数据, 每一行都是一条实际数据 2. 需要解压缩每个文件,遍历每行找到用逗号隔开的第21列为16233,第23列为27188的行. 以第2列为键计算符合的数量 3. 在全部统计结果里面根据值计算符合的键的数量: 比如{'a':2, 'b':1, 'c':1},结果就是{1:2, 2:1},也就是2次的有2个,1次的只有一个 分析一上来真的想用awk来搞.但是和其他同事一聊,有几个难点: 12341. 2天数据总量在400G以上,用awk还要保留2次哈希结果-不可能用awk 2. 用python,据同事经验说:只是解压缩这些小文件后读取什么都不做也大概1天多的时间,完全不能忍 3. 数据还没有放到hadoop, 没有其他更好更快的方法 #####解题思路: 最初我想做成这样: 把需要处理的这些压缩文件放到队列里面 启动多进程出队列里面获取要处理的文件,执行,把符合的结果放到共享变量叠加 计算完成后从共享变量里面或者数据在生成上面第三条的结果但是今天讲的是python得mapreduce,也就是我后续的版本,它源于 ...
阅读全文 »

gevent-twisted-多线程谁更快?

发表于 2016-03-19 | 分类于 python | 阅读次数:
前言标题有点唬人,以前了解过研究gevent,twisted,scrapy(基于twisted)。最近有个想法:这些东西比如做爬虫,谁的效率更好呢?我就写了以下程序(附件)测试然后用timeit(跑3次,每次10遍,时间有限)看效果####原理: 为了防止远程网络的问题,从一个网站爬下网页代码(html),页面下载本地放在了我的本机(gentoo+apache) 然后爬虫去分析这些页面上面的链接(开始是主页),再挖掘其他页面,抓取页面关键字(我这里就是个‘py’)程序打包Crawler.tar.bz2先看代码树: dongwm@localhost ~ $ tree Crawler/ Crawler/ ├── common_Crawler.py #标准爬虫,里面只是多线程编程,抓取分析类在common.py ├── common.py #共用函数,里面只是抓取页面分析页面关键字 ├── common.pyc #你懂得 ├── Crawler #scrapy和django框架差不多的用法 │ ├── **init**.py │ ├── **init**.pyc │ ├── items.py #不需要利用,默认 │ ├── pipelines.py │ ├── settings.py │ ├── settings.pyc │ └── spiders #抓取脚本文件夹 │ ├── **init**.py │ ├── **init**.pyc │ ├── spiders.py #我做的分析页面,这个和多线程/gevent调用的抓取分析类不同,我使用了内置方法(大家可以修改共用函数改成scrapy的方式,这样三种效果就更准确了) │ ...
阅读全文 »

Python3.6全揭秘

发表于 2016-03-18 | 分类于 python | 阅读次数:
刚才看到Learn Python the HardWay第四版都开始使用Python3.6😝,。想起当时某些人还吐槽我的书竟然是使用Python 2的,好吧,我也来列一下Python3.6中非常值得一提的变化(最详细的当然还是看官方的What’sNew)。 Literal String Interpolation新增了格式化字符串变量语法,通过字符串的前缀f,实现类似于Scala/Swift等语言的字符串插值: 1234567891011121314>>> name = 'Fred' >>> f'My name is {name}' 'My name is Fred' >>> date = datetime.datetime.now().date() >>> f'{date} was on a {date:%A}' '2017-02-25 was on a Saturday' >>> f'{"quoted string"}' 'quoted string' >>> def foo(): ... return 20 ... >>> f'result={foo()}' 'result=20' Asynchronous Generators新增异步生成器语法,可以直接在协程中用生成器: 12345678async def coro(): for item in range(10): yield item async def main(): async for item in c ...
阅读全文 »

知乎Live全文搜索之使用Elasticsearch做聚合分析

发表于 2016-03-17 | 分类于 python | 阅读次数:
ES除了全文搜索以外还有一个主要功能, 就是数据的聚合分析。我会在微信小程序里用到聚合功能。今天先介绍一下。目前DSL库支持如下三种常用聚合模式 Metrics Aggregations顾名思义, 主要是用于计算特定的度量字段,Metric很像SQL中的avg、max、min等方法。我们找一下最多的Live有多少人感兴趣: 123456789In : from elasticsearch_dsl import A In : s = Live.search() In : s.aggs.metric('max_liked_num', A('max', field='liked_num')) Out: <elasticsearch_dsl.search.Search at 0x10a47b550> In : r = s.execute() In : r.aggregations.max_liked_num Out: {'value': 6918.0} 嚯。看看是哪一个吧: 123In [27]: s.query('match', liked_num=6918).execute()[0].subject Out[27]: '致所有近视想摘掉眼镜的你们' 有点出人意料哦~其实度量的也不一定是文档的某个特定字段值, 可以是文档通过脚本生成的值。比如我们看看全部Live平均收入,收入=票价*参与人数,是2个字段。要这样用: 1234567891011121314In : from elasticsearch_dsl import A In : s = Live.search() In : s.aggs.metric('avg_income', A('scripted_metric', init_script="params ...
阅读全文 »

speakerdeck

发表于 2016-03-16 | 分类于 python | 阅读次数:
前言今天是在Ad的最后一天,本来准备了一个分享.关于业务中一些吐槽和我一些trick的用法,有兴趣的可以下载speakerdeck 主题 celery celery2/celery3, py-amqp, kombu的用法, celery和djangocelery的集合 expect 使用expect自动登录复杂的服务器 mapreduce 一个并行处理文件的例子,说明使用python跑mapreduce多么厉害 portforward 端口转发 restapi 我眼中的restapi(pdf) tornado 使用tornado一部非阻塞演示的tmux脚本: 1234567891011121314151617181920#!/bin/bash SESSION=$USER COMMAND='http Space http://localhost:8000/sleep' tmux new-session -d -s $SESSION tmux new-window -t $SESSION -n 'Logs' tmux split-window -h tmux select-pane -t 0 tmux send-keys $COMMAND C-m tmux select-pane -t 1 tmux send-keys $COMMAND C-m tmux split-window -v tmux send-keys $COMMAND C-m tmux select-pane -t 0 tmux split-window -v tmux send-keys $COMMAND C-m # Attach to session tmux attach-session -t $SESSION 版权声明:本文由 董伟明 原创,未经作者授权禁止任何 ...
阅读全文 »

wechat-admin:Flask使用篇

发表于 2016-03-15 | 分类于 python | 阅读次数:
在Flask最佳实践里面有三项在本项目也有应用: 怎么用扩展 自定义RESTAPI的处理 local_settings.py这我就不再复述了,看些不一样的内容吧。Flask处理静态资源理论上应该使用Nginx来处理静态资源,但是wechat-admin不是面向用户的产品,所以为了便利直接使用Flask提供的SharedDataMiddleware中间件: 123456789from werkzeug.wsgi import SharedDataMiddleware app = Flask(__name__) app.add_url_rule('/uploads/<filename>', 'uploaded_file', build_only=True) app.wsgi_app = SharedDataMiddleware(app.wsgi_app, { '/uploads': app.config['UPLOAD_FOLDER'] }) 在给对应群聊/用户发消息时添加的文件保存在服务器上面,可以通过/uploads/<filename>访问到。 CORS本地开发时,前端运行的端口和后端API接口用的端口不一致,为了方便本地开发可以添加一个钩子,利用CORS实现跨域请求: 123456789# For local test @app.after_request def after_request(response): response.headers.add('Access-Control-Allow-Origin', '*') response.headers.add( 'Access-Control-Al ...
阅读全文 »

使用Strider实现持续集成

发表于 2016-03-14 | 分类于 python | 阅读次数:
前言持续集成(Continuous Integration)已经是公认的保证产品质量和开发快速迭代的开发实践了。目前常见的CI服务器有2种: Jenkins。 Jenkins是一个用Java编写的开源的持续集成工具, 它有丰富的插件和完善的API, 但实际工作中发现它不太稳定, Python和前端工程师很难对其进行二次开发, 页面和功能也有些陈旧。 Travis CI。 一个针对Github的云服务平台, 只对开源项目提供免费的CI服务。本篇博客将给大家介绍一个新的持续集成工具Strider。一个使用Node.js开发的、 开源的持续集成和发布服务器。 目前它已经支持Github、 Bitbucket、 Gitlab等平台, 支持Python、Ruby、 Node.js和其他自定义的应用。虽然它使用常见了bootstrap, 但是页面效果还是很不错的。在使用之前, 我们先创建一个Github开发者应用,内容如下图:然后在Github上创建一个用来测试的项目dongweiming/tola。使用Strider集成使用最新版的Node.js: 12345❯ wget https://nodejs.org/dist/v4.4.2/node-v4.4.2.tar.gz ❯ tar zxf node-v4.4.2.tar.gz ❯ cd node-v4.4.2 ❯ ./configure && make && sudo make install 安装Strider: 1234❯ git clone https://github.com/Strider-CD/strider ❯ cd strider ❯ npm install # 安装依赖包 Strider配置项很多, 可以在Strider目录下添加.striderrc文件: 1 ...
阅读全文 »
1…121314…20
Kevin Huang

Kevin Huang

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