对于一个项目来说,配置是一个很严肃的问题,比如说:在开发环境和生产环境中,配置是不同的,那么一个项目该如何自由地在不同的配置环境中进行切换呢,思考下,然后带着答案或者疑问往下阅读。 新建文件夹 demo2 ,内部建立这样的文件结构: demo02 ├── config │ ├── __init__.py │ └── config.py └── run.py 其中 run.py 内容如下: #!/usr/bin/env python from sanic import Sanic from sanic.response import text app = Sanic() @app.route("/") async def test(request): return text('Hello World!') if __name__ == "__main__": app.run(host="0.0.0.0", port=8000, debug=True) 代码示例中开启了 debug 模式,假设我们需要通过 config.py 配置文件来实现控制服务的 debug 模式开启与否,那该怎么实现呢。 在 config.py 中添加一行:DEBUG=True ,然后 run.py 内容改为: #!/usr/bin/env python from sanic import Sanic from sanic.response import text from config import DEBUG app = Sanic() @app.

在安装Sanic之前,让我们一起来看看Python在支持异步的过程中,都经历了哪些比较重大的更新。 首先是Python3.4版本引入了asyncio,这让Python有了支持异步IO的标准库,而后3.5版本又提供了两个新的关键字async/await,目的是为了更好地标识异步IO,让异步编程看起来更加友好,最后3.6版本更进一步,推出了稳定版的asyncio,从这一系列的更新可以看出,Python社区正迈着坚定且稳重的步伐向异步编程靠近。 安装 Sanic是一个支持 async/await 语法的异步无阻塞框架,这意味着我们可以依靠其处理异步请求的新特性来提升服务性能,如果你有Flask框架的使用经验,那么你可以迅速地使用Sanic来构建出心中想要的应用,并且性能会提升不少,我将同一服务分别用Flask和Sanic编写,再将压测的结果进行对比,发现Sanic编写的服务大概是Falsk的1.5倍。 仅仅是Sanic的异步特性就让它的速度得到这么大的提升么?是的,但这个答案并不标准,更为关键的是Sanic使用了uvloop作为asyncio的事件循环,uvloop由Cython编写,它的出现让asyncio更快,快到什么程度?这篇文章中有介绍,其中提出速度至少比 nodejs、gevent 和其他Python异步框架要快两倍,并且性能接近于用Go编写的程序,顺便一提,Sanic的作者就是受这篇文章影响,这才有了Sanic。 怎么样?有没有激起你学习Sanic的兴趣,如果有,就让我们一起开始学习吧,在开始之前,你只需要有一台安装了Python的电脑即可。 说明:由于Windows下暂不支持安装uvloop,故在此建议使用Mac或Linux 虚拟环境 程序世界一部分是对应着现实的,在生活中,我们会在不同的环境完成不同的任务,比如在厨房做饭、卧室休息,分工极其明确。 其实用Python编写应用服务也是如此,它们同样希望应用服务与开发环境是一对一的关系,这样做的好处在于,每个独立的环境都可以简洁高效地管理自身对应服务所依赖的第三方库,如若不然,各个服务都安排在同一环境,这样不仅会造成管理上的麻烦,还会使第三方库之间产生冲突。 通过上面的叙述,我们是不是可以得出这样一个核心观点:应该在不同的环境下做不同的事 ,以此类推,写项目的时候,我们也需要为每个不同的项目构建一个无干扰的的环境,发散思维,总结一下: 不同的项目,需要为其构建不同的虚拟环境,以免互相干扰 构建虚拟环境的工具很多,如下: virtualenv pyenv anaconda …… 以上三个工具都可以快速地帮助我们构建当前需要的Python环境,如果你之前没有使用过,可直接点开链接进行下载,如果你正在使用其它的环境管理工具,也不要紧,因为不论你使用哪一种方式,我们最终目的都是针对一个新项目构建一个新的环境。 安装配置好之后,简单看看官方提供的使用方法,就可以开始了,比如我本机使用的是anaconda ,安装完成后可以很方便地创建一个虚拟环境,比如这里使用Python3.6来作为本书项目的默认环境: # 新建一个python3.6环境 conda create --name python36 python=3.6 # 安装好之后 输入下面命令进入名为python36的环境 source activate python36 若安装速度比较慢,可以考虑换国内源,比如 国内镜像 ,至于为什么选择python3.6作为默认环境,一是因为Sanic只支持Python3.5+,二则是我们构建的项目最终是要在生产环境下运行的,所以建议最好安装Python3.6下稳定版本的asyncio。 安装Sanic Python安装第三方模块都是利用pip工具进行安装,这里也不例外,首先进入上一步我们新建的 python3.6 虚拟环境,然后安装: # 安装Sanic,请先使用 source activate python36 进入虚拟环境 pip install sanic # 如果不想使用uvloop和ujson 可以这样安装 SANIC_NO_UVLOOP=true SANIC_NO_UJSON=true pip install sanic 通过上面的命令,你就可以在 python3.

上一篇笔记1.Docker - 初使用 主要介绍了Docker的安装以及一个简单的运行例子,本次笔记主要通过具体的实例来介绍一些Docker镜像以及容器的基本操作 1.目标 之前的毕设owllook是用python编写的,我将它开源在github上,正借此机会,将其制作成Docker镜像,以便部署 本次笔记就以此项目为中心,目标是将该项目制作成Docker镜像,并从过程中一步步熟悉Docker 2.定制镜像 上一篇笔记中说了,镜像是由一系列指令一步一步构建出来,但是,最初的镜像我们还是需要从镜像仓库获取,比如owllook基于python3.6,那么我第一步便是从镜像仓库获取python镜像 运行命令:docker pull python:3.6 稍等片刻,就会拉取一个python3.6的镜像下来,让我们以这个镜像为基础来启动一个容器: # 具体可参考 dcker run --help 来了解详细命令 docker run -it --rm python:3.6 python # 终端会有如下输出 此时进入了容器中的3.6环境 Python 3.6.2 (default, Jul 24 2017, 19:47:39) [GCC 4.9.2] on linux Type "help", "copyright", "credits" or "license" for more information. >>> # 也可以直接进入容器 docker run -it --rm python:3.6 有了基础镜像,下面我们有两种方案构建owllook镜像: 使用docker commit 命令 Dockerfile(使用此方案) Dockerfile内容如下: # 基于python3.6镜像来构建owllook镜像 FROM python:3.6 MAINTAINER howie6879 <howie6879@gmail.

自己很少使用Docker,也没有机会使用,毕业开始工作后,进的公司使用Docker进行部署,这是我的一些笔记,以便翻阅。 1.准备 系统:ubuntu16.04 or centos … 1.1.安装 1.1.1.ubuntu16.04 首先安装依赖包,在终端输入: sudo apt-get update sudo apt-get install apt-transport-https ca-certificates 安装Docker,自动安装脚本提供了非常简洁的安装方式: # 官方下载方式 curl -sSL https://get.docker.com/ | sh # 镜像站会提升下载速度 # 阿里云的安装脚本 curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh - # DaoCloud 的安装脚本 curl -sSL https://get.daocloud.io/docker | sh 安装完成后,输入sudo service docker status 可见Docker已经启动: ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since 二 2017-08-15 15:34:46 CST; 26min ago Docs: https://docs.

1.前言 gRPC是一个开源的高性能并且能在任何环境中运行的RPC框架,其采用protocol buffer: protocol buffer是一个用于结构化数据序列化的一个灵活的、有效率的自动化机制,类似于XML(但比其更简单、小巧且简单),对于某个服务需要定义的数据结构,可以使用protocol buffer(proto3)来进行定义,即根据protocol buffer language来定义你的protocol buffer data 最后再利用protocol buffer编译定义的 .proto 文件生成客户端和服务端代码,本文将举一个小例子进行介绍,且默认站在python的角度来编写代码 2.实践 假设有这样一个需求,将客户端传来的某个字符串转化为小写,那么,首先从定义数据结构开始,暂时先新建如下结构的项目: demo └── proto └── lower.proto 接下来将编写proto文件,本例使用proto3语法进行编写,protobuf定义的语法请看这里 lower.proto文件内容如下: syntax = "proto3"; package lower; service Lower { rpc Lower (LowerRequest) returns (LowerResult) { } } message LowerRequest { string message = 1; } message LowerResult { string lower_message = 1; } 定义一个服务Lower,其接受一个字符串消息并返回小写的字符串消息,编写完毕,下面进行编译,创建文件proto_compile.py,并安装相关的包: pip install grpcio pip install grpcio-tools # script proto_compile.py from grpc_tools import protoc # 或者在项目根目录运行: # python -m grpc_tools.

1.为什么写这个?

一些简单的页面,无需用比较大的框架来进行爬取,自己纯手写又比较麻烦

因此针对这个需求写了talonspider:

  • 1.针对单页面的item提取 - 具体介绍点这里
  • 2.spider模块 - 具体介绍点这里

2.介绍&&使用

2.1.item

这个模块是可以独立使用的,对于一些请求比较简单的网站(比如只需要get请求),单单只用这个模块就可以快速地编写出你想要的爬虫,比如(以下使用python3,python2见examples目录):