KevinHuang

KevinHuang的博客


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 一些书

  • 常用命令

  • python tips

  • 站点地图

  • rss

  • 公益404

  • 搜索

知乎Live全文搜索之模型接口

发表于 2016-02-21 | 分类于 python | 阅读次数:
看这篇文章前推荐阅读相关的如下文章: 知乎Live全文搜索之模型设计和爬虫实现 知乎Live全文搜索之使用Elasticsearch做聚合分析 知乎Live全文搜索之使用Elasticsearch做搜索建议 知乎Live全文搜索之让elasticsearch_dsl支持asyncio 在知乎Live全文搜索之让elasticsearch_dsl支持asyncio 一文中,我把后端工作分成了4步,今天是完成爬虫和模型接口这2步,接口返回的数据会被微信小程序使用。详细的列一下接口需求: 搜索。搜索符合输入的关键字的Live和用户,按照之前提到的各种策略排序,也支持通过status状态过滤「已结束」和「未结束」2种类型的Live。支持分页。 搜索建议。提供符合输入的关键字的Live的建议。 发现。把全部的Live按照之前提到的各种策略排序,可以通过各种字段排序,可以选择Live开始的时间范围(默认是全部)。 获取热门话题。 获取某话题详细信息及话题下的Live,支持分页、排序、时间范围。 获取全部用户,并且可以按照举办的Live数量、更新Live时间等条件排序。 获取单个用户信息。 根据各种策略排序,获取7天热门Live,非知乎排序。 根据各种策略排序,获取30天热门Live,非知乎排序。添加Topic模型由于4和5的需求,我添加了Topic这个模型,上篇文章说过SQLite不支持并发,所以替换成了MySQL,要把config里面的DB_URI改成如下格式: 12DB_URI = 'mysql+pymysql://localhost/test?charset=utf8mb4' 其中test是库的名字,charset要用utf8mb4,因为有些用户信息甚至Live的标题里面包含emoji。MySQL的客户端用的是PyMySQL,需要在schema上指出来。Topic类和之前 ...
阅读全文 »

(2017)你最不建议使用的Python Web框架?

发表于 2016-02-20 | 分类于 python | 阅读次数:
前言这是一篇发在知乎专栏的文章,内容是之前我提的「(2017)你最不建议使用的PythonWeb框架?」下的回答。不过有些话没有说完,比如不建议tornado,却没有说对asyncio的看法,由于它的热度过去了我也没有补充,今天就发在公众号下吧。在知乎可以看到的很多Web框架推荐,有很多内容已经过时,有些直接是从网上搜的,自己根本没有真的用过,不知道推荐的时候他们的良心会不会痛,不过幸好有我来树立正确的价值观了。 第一不推荐 web.py我以前说过,评价XX是否可以用在生产环境的一部分标准是: 代码质量。web.py的创始人Aaron Swartz自杀(官方说法)后,新的维护者能力实在是… 社区活跃程度和解决issue的能力。自己去github上去看未解决的issue和未合并的pull request数量 项目迭代情况。webpy-0.37 on Jun 26, 2012,webpy-0.38 on Jul 8, 2016。到现在一年就这样过去了然鹅什么都还没有发生。第二不推荐 bottlebottle其实是第一个使用装饰器作为路由的框架,不过它也存在社区活跃程度和解决issue的能力的问题,其实这说明了一个问题,它更像是某个(些)人的玩具,并不关心用户反馈。不知道大家是否知道它和Flask的故事(简单的说Flask的作者Armin Ronacher开发了Werkzeug推荐给Bottle作者,但是Bottle作者非常执着于“单文件”和“无依赖”,拒绝了使用Werkzeug,ArminRonacher就自己写了Flask),如果3-4年前你选择bottle我也是没意见的,现在来看Flask完爆它,哪怕是自己写的demo,你说你用了一个不适合在生产环境中使用框架的意义在哪里?完全没有积累啊。不过客观的说读源码学习写框架倒是可以的第三不推荐 tornado别说知乎也在用,用得 ...
阅读全文 »

python程序员Mac初始化环境

发表于 2016-02-19 | 分类于 python | 阅读次数:
####前言早就想总结一篇python程序员的Mac配置笔记,趁这次就写一下我初始化的一些实践####安装Xcode, Command line tools作为开发者,肯定需要gcc,clang这些环境,Xcode界面也能下载Command line tools,但是下载好几次都有签名错误的问题,直接去官网下载使用浏览器下载一段时间锁屏会停止下载,又不能续传。所以我还是习惯命令行下载.可以在这里找到https://github.com/orzrd/mytools/blob/master/adc_download.sh比如下载xcode: 12./adc_download.sh http://adcdownload.apple.com/Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg ####安装git在这里 <http://git-scm.com/download/mac,但是你需要注意版本和你的os的版本的对应关系>####安装brew-包管理工具 以后我通过brew安装的软件都放在这个目录12345sudo chown -R `whoami` /usr/local git init git remote add origin git://github.com/mxcl/homebrew.git git pull origin master ####安装一些常用工具 12345678brew install wget the_silver_searcher tree tmux htop mysql autojump mongodb zsh-completions sudo easy_install pip sudo pip install virtualenv sudo pip install ...
阅读全文 »

浅谈MVC、MTV和MVVM

发表于 2016-02-18 | 分类于 python | 阅读次数:
昨天有位同学私信我,说他所在的公司的不少项目都有个controllers.py的文件或者controllers的目录用来存放视图。但是和他理解的PythonWeb框架的设计模式不太一样,问我MVC/MVT到底怎么区分。听他一开始说,我为之一怔,因为我身边的人就有写controllers的…不过我没有去验证这只是目录的名字而已。今天我和大家聊聊我对这几个流行的设计模式的理解。 复杂的软件必须有清晰合理的架构,否则无法开发和维护。 - 阮一峰 MVCMVC(Model View Controller 模型-视图-控制器)是一种Web架构的模式(本文不讨论桌面应用的MVC),它把业务逻辑、模型数据、用户界面分离开来,让开发者将数据与表现解耦,前端工程师可以只改页面效果部分而不用接触后端代码,DBA可以重新命名数据表并且只需更改一个地方,无需从一大堆文件中进行查找和替换。MVC模式甚至还可以提高代码复用能力。现在几乎所有的Web开发框架都建立在MVC模式之上。当然,最近几年也出现了一些诸如MVP, MVVM之类的新的设计模式。 但从技术的成熟程度和使用的广泛程度来讲,MVC仍是主流。MVC三要素: Model(数据模型)。是对客观事物的抽象。比如上篇我们说到的知乎Live,Live就是一个模型,可以用Live类来表示。而一个模型通常还带有很多的和业务相关的逻辑,比如添加,更新,获取Live主讲人信息等等,这些组成了模型的方法。对于开发者模型的表示方法非常易懂和清晰,可以通过非常便捷的代码来做CURD操作而无需写一条又一条的SQL语句。 View(视图)。呈现给用户的效果,呈现的内容是基于Model,它也是收集用户输入的地方。比如看到一篇Live,数据是一个Live.get(live_id).to_dict()的结果,效果是通过对应的模板和样式把这个数据展示出来。 Contor ...
阅读全文 »

gentle帮助你快速部署代码到测试环境

发表于 2016-02-17 | 分类于 python | 阅读次数:
####前言我想很多开发的同学都经历过这样的开发流程: 本地修改代码 把代码推到测试环境 重启测试环境需要的服务 本地看效果,改bug重复1-3 功能稳定后上线这个过程有什问题呢? 假设你是一个做过运维或者能力很强的人,比如我这种,本地跑测试环境,但是假如一个新人,或者对测试环境中的某些部分不是很了解的人, 甚至需要和生产环境完全一样的条件下, 本地可能就不好使了. 那么这需要一个测试服务器 首先你每次修改代码, push ,重启环境都需要你登陆测试环境,至少不够自动化.然后退回本地看效果,这个过程有点浪费时间和经理 其次是你可能有好几个项目,他们之间可能都没什么共通点. 你需要多个测试环境 当然你可以写几个脚本,为你每个测试环境写一个东西去自动化这些,未尝不可. 只是需要重复造很多轮子 假如为了安全有跳板机,你需要登陆跳板机才能跳到你的测试服务器,你可能要写很复杂的expect脚本然后是我认为最重要的:凡是屁大点事就放个deamon的运维都是耍流氓, 就拿小屁几台服务器还搞神马salt, ansible之类的事情,真是太无聊了.这些东西帮助你做了很多事情,但是会让你变得更懒.而且重要的是-它们写的并不一定只符合你的需要或者就不符合你的需要.我喜欢简单粗暴的实现,最近在看fabric的代码,作为做过op,也给salt贡献过代码的我,写了这个东西:gentle, 帮助我自动化提交代码到我的测试环境.这个东西是我认为符合我需要,或者大部分开发同学需要的小东西,基于fabric,docopt 和yaml.####我的工作的一些特点我负责几个项目, 它们有以下特点 项目在不同的机房, 有完整的测试环境和相关数据 项目依赖的服务基本不同,比如有的使用了supervisor, 有的是程序fork后退出了父进程;有的使用了nginx+uwsgi,有的就是nginx+服务等. 项目之间需 ...
阅读全文 »

udev升级的网卡重命名问题和解决

发表于 2016-02-16 | 分类于 python | 阅读次数:
####故障描述最近终于更新了下gentoo,重启发现我的eth0网卡启动失败: 12345* Bringing up interface eth0 * ERROR: interface eth0 does not exist * Ensure that you have loaded the correct kernel module for your hardware * ERROR: net.eth0 failed to start 而启动某些我常用的服务,比如mongodb,也报错: 1234567~ # /etc/init.d/mongodb restart * Bringing up interface eth0 * ERROR: interface eth0 does not exist * Ensure that you have loaded the correct kernel module for your hardware * ERROR: net.eth0 failed to start * ERROR: cannot start mongodb as net.eth0 would not start 竟然也需要启动网卡?######查看内核和dmesg:查看内核模块已经选中,而且以前eth0也有,再看dmesg 1234dmesg |grep network [ 74.261872] systemd-udevd[14259]: renamed network interface wlan0 to wlp2s0 [ 74.391865] systemd-udevd[14259]: renamed network interface eth0 to enp0s4 原来被重命名了### ...
阅读全文 »

UserDict、UserString、UserList存在的意义

发表于 2016-02-15 | 分类于 python | 阅读次数:
最近遇到了一个继承Python内建结构的坑儿和大家分享下。从Python2.2开始,Python支持继承Python内建结构,如list、dict。最近在实现一个功能,为了简化内容,我直接继承了dict,但是结果和预期不一样。举个例子: 123456789101112In : class NewDict(dict): ...: def __getitem__(self, key): ...: return 42 ...: In : d = NewDict(a=1) In : d Out: {'a': 42} In : d2 = {} In : d2.update(d) In : d2 Out: {'a': 1} 也就是说NewDict的getitem方法被dict.update给忽略了。这让我很惊讶,我之前用UserDict的时候是正常的(这次为啥直接用dict也不知道抽了什么筋): 123456789101112131415161718In : from UserDict import UserDict In : class NewDict(UserDict): ...: def __getitem__(self, key): ...: return 42 ...: In : d = NewDict(a=1) In : d['b'] =2 In : d Out: {'a': 1, 'b': 2} In : d['b'] Out: 42 In : d2 = {} In : d2.update(d) In : d2 Out: {'a': 42, 'b': 42& ...
阅读全文 »

Python3新特性汇总

发表于 2016-02-14 | 分类于 python | 阅读次数:
这篇文章灵感来源于一个新项目A short guide on features of Python 3 for datascientists,这个项目列出来了作者使用Python3用到的一些特性。正巧我最近也想写一篇介绍Python 3(特指Python 3.6+)特色用法的文章。开始吧! pathlib模块pathlib模块是Python 3新增的模块,让你更方便的处理路径相关的工作。 1234567891011121314151617181920212223242526272829303132In : from pathlib import Path In : Path.home() Out: PosixPath('/Users/dongweiming') # 用户目录 In : path = Path('/user') In : path / 'local' # 非常直观 Out: PosixPath('/user/local') In : str(path / 'local' / 'bin') Out: '/user/local/bin' In : f = Path('example.txt') In : f.write_bytes('This is the content'.encode('utf-8')) Out[16]: 19 In : with f.open('r', encoding='utf-8') as handle: # open现在是方法了 ....: print('read from open(): {!r}'.format(handle.read())) ....: read from open(): 'This is the content' In : p = ...
阅读全文 »

使用Python进行并发编程-PoolExecutor篇

发表于 2016-02-13 | 分类于 python | 阅读次数:
之前我们使用多线程(threading)和多进程(multiprocessing)完成常规的需求,在启动的时候start、jon等步骤不能省,复杂的需要还要用1-2个队列。随着需求越来越复杂,如果没有良好的设计和抽象这部分的功能层次,代码量越多调试的难度就越大。有没有什么好的方法把这些步骤抽象一下呢,让我们不关注这些细节,轻装上阵呢?答案是: 有的 。从Python3.2开始一个叫做concurrent.futures被纳入了标准库,而在Python2它属于第三方的futures库,需要手动安装: 12❯ pip install futures 这个模块中有2个类:ThreadPoolExecutor和ProcessPoolExecutor,也就是对threading和multiprocessing的进行了高级别的抽象,暴露出统一的接口,帮助开发者非常方便的实现异步调用: 1234567891011121314151617181920import time from concurrent.futures import ProcessPoolExecutor, as_completed NUMBERS = range(25, 38) def fib(n): if n<= 2: return 1 return fib(n-1) + fib(n-2) start = time.time() with ProcessPoolExecutor(max_workers=3) as executor: for num, result in zip(NUMBERS, executor.map(fib, NUMBERS)): print 'fib({}) = &# ...
阅读全文 »

我的知乎Live:Python工程师的入门和进阶

发表于 2016-02-12 | 分类于 python | 阅读次数:
关注知乎Live也很久了,但是很少看到程序员做Live。最近看前端都展开了几场Live, 而我大知乎最热语言 Python还没有相关Live。和写书一样,我再来带个头,希望越来越多的同学能把自己的经验和思考分享出来。点击这里上车 →_→ 知乎 Live -全新的实时问答再次介绍一下这次Live:我叫董伟明,毕业之前是一名「烹饪工艺与营养」专业的专科学生,目前在豆瓣条目组任职高级产品开发工程师,主要负责豆瓣读书、电影、音乐、东西等产品线。从 2011年开始接触 Python, 从运维、运维开发到现在的 Web 开发,积累了丰富的运维和开发经验。热爱开源,为多个知名开源项目贡献过代码,也给 Python标准库提交过 Patch 。我是《 Python Web 开发实战》作者,本书上市的 2 个多月时间里面已经售出 7k余本,第四印正在筹备中,本书也将输出到台湾地区。Python 是一门优雅而又不失实用的语言,它语法简单很容易学会,又具有极高的可读性和灵活性。在知乎上 Python是受关注最多的编程语言。很遗憾在我初学的时候没有知乎这样的平台提供这么多的资源,甚至全靠自己摸索。虽然各类观点俯拾皆是,但是有时候却会让人迷失了方向。本次 Live 我将带来个人对 Python开发工程师如何入门、提高和进阶的一些见解,希望通过我个人的工作经历、学习方法,给不同阶段的同学在学习、工作、职业发展和面试等方面带来一些帮助。我设置了前150人可发言。欢迎提问 []( ̄▽ ̄)*。本次 Live 主要包括以下问题: 我的成长路径是怎么样的? 怎么样从零开始自学 Python? 怎么自学更高效? 应不应该接受 Python 培训,我认为靠谱的培训是什么样子的? 初、中级 Python 工程师在创业公司如何提升个人能力? 初、中级 Python 工程师在创业公司如何提升个人能力? 我的职业发展是运维 ...
阅读全文 »
1…151617…20
Kevin Huang

Kevin Huang

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