self-motivation
专注LINUX系统与性能分析优化
展开
-
pytest教程(二)--------使用和调用
上一节我们介绍了pytest的安装和简单使用,这一节我们再加些料pytest不仅容易编写小的测试例,也支持程序和库相关的复杂函数测试通过python -m pytest来调用pytestpython -m pytest [...]这和直接使用pytest命令功能相同,唯一的区别是会将当前目录加入到sys.path中.可能的退出码调用pytest可能产生6种不同的退出码Exit code 0: 所有的测试例都被收集且通过 Exit code 1: 所有..原创 2020-06-07 19:58:40 · 644 阅读 · 0 评论 -
pytest教程(一)----------简单入门
1.安装pip install pytest查看版本信息pytest --versionThis is pytest version 5.4.3, imported from /usr/local/lib/python3.8/site-packages/pytest/__init__.py2.编写pytest的"hello world"编写test_sample.py,测试func函数# content of test_sample.pydef inc(x): .原创 2020-06-07 12:52:42 · 1070 阅读 · 0 评论 -
zip暴力破解工具Python实现
原理:1.指定密码包括的字符各类:数字,小写字母,大写字母,特殊字符2.指定密码的长度3.遍历所有可能的组合暴力破解在密码比较简单的时候比较有用。使用指导:optional arguments: -h, --help show this help message and exit -a 指定密码中包...原创 2020-05-04 20:22:06 · 445 阅读 · 0 评论 -
深入学习Python中的并发(二)------高级篇
考虑下面的需求:我们有一个日志目录,里面全是gzip压缩的日志文件。每个日志文件的格式是固定的,我们要从中提取出所有访问过robots.txt文件的主机1.1.1.1 ------------ [10/june/2012:00:18:50 - 0500] "GET /robots.txt ..." 200 712.1.1.3 ------------ [12/june/2013:0...原创 2020-02-25 21:49:29 · 249 阅读 · 0 评论 -
深入学习python中的并发(一)---线程
python也提供了线程相关的并发原语,如锁threading.Lock,事件threading.Event,条件变量threading.Condition。本质上都是对pthread_mutex_t, pthread_condition_t的封装。本篇文章通过2个例子来分析理解python中如何控制并发。1.实现2个线程交替打印2.实现一个支持并发的环形队列代码1:2个...原创 2020-02-23 10:38:11 · 359 阅读 · 0 评论 -
Celery源码分析(三)---------Blueprint
上一节讲到任务执行单元Worker主要维护了一个Blueprint对象,Worker的启动主要就是启动Blueprint对象,这一节我们来详细看下Blueprint.首先,还是先看下时序流程图:结合时序图进行分析:1.在Worker调用setup_instance时会构造Blueprint,这个Blueprint是个内部类,里面定义了其default_s原创 2016-12-26 22:41:10 · 2171 阅读 · 0 评论 -
Celery源码分析(二)--------任务执行单元Worker的流程
上一节中讲到通过命令行构造"celery.apps.worker::Worker"对象,然后就调用Worker对象的start方法启动Worker.因此,这个Worker对象是一个核心对象,下面着重对其分析。下面是Worker对象构造函数和start函数的时序图,对照流程图分析:原创 2016-12-25 21:53:40 · 3773 阅读 · 0 评论 -
Celery源码分析(一)-------------从命令执行到生成Worker
从今天起开始Celery源码分析系列文章。有需要的同学可以关注一上下,主要目的就是理清celery的核心对象及处理流程,方便大家学习。大家有需要详细讲解的部分可以告诉我,如果有时间会详细讲解和解答,感谢大家的支持。第一篇从一个常用的命令"celery -A tasks worker"开始,讲述从命令执行开始到生成Worker对象的流程。下面是涉及到的对象的时序图:原创 2016-12-25 13:04:14 · 6624 阅读 · 0 评论 -
python中的一些小知识(一)
1.特殊变量"name"我们可以在我们的python文件中加入如下代码,以方便进行单元测试。def unit_test(): print("this is a unit test!")if __name__ == "__main__": unit_test()当Python检测到一个程序文件正在被解释器执行而不是作为一个被导入的模块,它会把特殊变量__n原创 2016-01-28 22:27:49 · 1427 阅读 · 2 评论 -
Celery源码分析(五)----------Consumer的Blueprint
紧接着上一篇教程,接着分析Consumer的Blueprint的流程。由于Consumer步骤的create方法将创建的celery.worker.consumer::Consumer对象返回了,所以Worker的Blueprint在start的时候,会调用create方法返回的对象的start方法。celery/worker/consumer.py:def start(self)原创 2017-01-02 13:01:12 · 1973 阅读 · 0 评论 -
scrapy源码分析(一)---------------------总执行流程概览
scrapy是一个基于twisted实现的开源爬虫,要读懂其源码,需要对twisted的异步编程模型有一定了解。可以通过之前3篇deferred的相关教程了解。下面是总结的执行一个爬虫任务的整体执行流程,即运行"scrapy crawl xxxSpider"的执行流程:流程中主要的颜色框的含义如下 :1.红色框是模块或者类。2.紫色框是向模块或者类发送的消息,一般为函数调用。原创 2016-11-27 22:01:06 · 8517 阅读 · 2 评论 -
scrapy源码分析(九)-----------Scheduler
上一节有几个类还没具体分析,如Scheduler和Scraper,这一节先分析Scheduler的源码。scrapy/core/scheduler.py:在分析engine的open_spider函数时,我们讲过scheduler对象是通过类的from_cralwer方法生成的,我们先看下这个方法的实现:@classmethoddef from_crawler(c原创 2016-12-07 23:15:51 · 4532 阅读 · 1 评论 -
scrapy源码分析(十二)---------下载中间件RobotsTxtMiddleware
上一节分析了下载器的源码,知道了一个request经过middleware到handler下载返回response,response再经过middleware,最后由scraper处理的流程。其中正是middleware的存在使我们对下载和解析的控制有很大的灵活性,我们可以自定义中间件来个性化我们的需求。这一节就分析一下middleware在整个下载流程中所发挥的关键作用。我们从默原创 2016-12-13 23:37:47 · 2678 阅读 · 0 评论 -
scrapy源码分析(八)--------ExecutionEngine
上一节分析了Crawler的源码,其中关键方法crawl最后会调用ExecutionEngine的open_spider和start方法。本节就结合ExecutionEngine的源码进行详细分析。open_spider方法:scrapy/core/engine.py:@defer.inlineCallbacksdef open_spider(self, spider,原创 2016-12-05 23:32:43 · 3325 阅读 · 4 评论 -
Twisted学习(三)---------------Deferred介绍
这篇教程介绍Deferreds,它是Twisted用于控制异步代码执行流程的机制。如果你不知道这意味着什么,不要着急-------这正是我要讲述的。这篇教程关注那些刚刚要使用Twisted的人们,主要用于帮助理解那些已经用Deferreds实现的代码。文档假设你有好的python知识。在学习完此文档后,你能够掌握什么是Deferreds以及如何使用它来协调异步代码。特别地,你将能够:原创 2016-11-20 22:18:02 · 2713 阅读 · 0 评论 -
Flask系列教程(一)-----------入门
安装flaskpip3 install flask使用git做版本管理mkdir flask_tutorialscd flash_tutorilasgit init过滤文件touch .gitignorezhangxa@ubuntu:~/python/flask_tutorials$ cat .gitignoreenv/*.pyc原创 2016-12-28 21:46:37 · 34989 阅读 · 3 评论 -
Flask系列教程(二)--------------使用SQLAlchemy创建数据模型
创建user表Z:\python\flask_tutorials>python manage.py shell>>> db.create_all()2016-12-30 22:58:44,661 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1原创 2016-12-31 19:57:03 · 12868 阅读 · 3 评论 -
list
从本篇文章开始,将介绍python提供的常用数据结构。这些数据结构从不同的维度可以进行不同的划分。按可变性划分: 可变数据结构:list,dict,set,bytearray 不可变数据结构:tuple,string,bytes 按是否可以存储不同类型的元素划分: 扁平数据结构:string,bytes,bytearray 容器数据结构...原创 2019-09-06 21:02:38 · 292 阅读 · 0 评论 -
必须会的SUPER
http://www.anger6.com/?p=1006函数原型如下:super([type[,object-or-type]])super函数返回一个代理对象,用于调用type的父类或兄弟类中的方法。talk is cheap.先来看调用父类中的方法class B: def method(self): print('metho in ...原创 2019-07-12 22:35:39 · 175 阅读 · 0 评论 -
python入门教程------元组和序列
上一节我们看到列表和字符串有许多共同的属性,比如索引和切片操作。它们是两种序列类型(list,tuple,range)。Python是一门不断发展的语言,可能会加入新的序列类型。今天我们来看另外一种标准的序列类型:tuple。元组由一系列逗号分隔的元素构成:>>> t = 12345, 54321, 'hello!'>>> t[0]1234...原创 2019-03-20 20:35:13 · 371 阅读 · 0 评论 -
python入门教程------list
下同是使用list方法的一些例子:>>> a = [66.25, 333, 333, 1, 1234.5]>>> print(a.count(333), a.count(66.25), a.count('x'))2 1 0>>> a.insert(2, -1)>>> a.append(333)>>&...原创 2019-03-19 23:06:57 · 251 阅读 · 0 评论 -
Celery源码分析(四)--------Blueprint各组件start流程
上一节讲了Worker主要通过Blueprint来提供服务,Worker的启动流程就是Blueprint各个步骤的启动流程,Blueprint有以下几个核心步骤:default_steps = set([ 'celery.worker.components:Hub', 'celery.worker.components:Queues', 'c原创 2017-01-01 12:25:18 · 2539 阅读 · 0 评论 -
scrapy爬虫实战(四)--------------登陆51job并使用cookies进行爬取
本文章代码仅供学习使用,如有侵权请联系作者删除,多谢。主要通过一个scrapy爬虫,理解如何登陆网站并使用登陆后的cookies继续爬取。登陆的用户名密码用XXX表示。# -*- coding: utf-8 -*-import osimport scrapyfrom scrapy.spider import CrawlSpider, Rulefrom scr原创 2017-01-10 23:12:43 · 4825 阅读 · 3 评论 -
Flask系列教程---------------Flask系列教程开发博客功能的github地址
Flask系列教程代码地址,随系列教程同步更新。https://github.com/happyAnger6/flask_blog原创 2017-01-09 22:37:26 · 1855 阅读 · 0 评论 -
<<深入理解Flask>>中遇到的那些坑
这篇文章的主要目的是分享学习>这本书中遇到的坑,可以使遇到相同问题的同学少走弯路。大家有遇到或解决过相关问题的,也欢迎分享出来。坑一:在把博客从sqlite重构到mongodb时,在登陆成功后想要访问只有登陆用户才能访问的页面时,遇到了下面的错误:in decorated_view elif not current_user.is_authenticated: File原创 2017-02-05 12:16:19 · 4535 阅读 · 0 评论 -
Flask系列教程(三)---------------通过模板创建视图(一)
在本章中,我们会使用Flask Jinja内置的模板语言,基于SQLAlchemy模型动态地创建HTML页面。我们会学到Jinja的一些函数,它们可以自动生成HTML,还可以对数据进行某些修改后再将其显示在页面上。本章的最后会讲解如何在Jinja中自动创建表单,以及检查表单的正确性。 Jinja的语法 Jinja是用Python实现的模板语言。模板语言是一种被设计来自动生成原创 2017-01-05 22:50:03 · 1985 阅读 · 0 评论 -
Scrapy爬虫实战(三)----------使用cookies爬取51job
我们先使用scrapy命令行快速创建一个工程zhangxa@ubuntu:~/python/scrapys$ scrapy startproject loginScrapyYou can start your first spider with: cd loginScrapy scrapy genspider example example.comzhangxa@u原创 2017-01-06 23:12:23 · 5074 阅读 · 3 评论 -
Twisted学习(二)--------------构造Deferreds
构造DeferredsDeferred对象是一种信号,当你调用一个函数而你想得到的数据还未返回时可以使用它。当一个函数返回了一个deferred对象,你可以为其关联一个函数用于处理数据返回。这篇教程关注问题的另一半:如果写返回deferred对象的函数,也就是如何构造deferred对象,包括如何直接返回deferred对象而不阻塞代码执行,以及如何在数据可用时调用callbacks。原创 2016-11-14 23:28:12 · 1796 阅读 · 0 评论 -
Twisted学习(一)----------------------Deffered参考
twisted.internet.defer.Deferred是Twisted异步编程的一个关键对象,理解它才能更好地使用Twisted.Deferred类似于tornado中coroutine的概念,都可以看作是一个协程,对需要异步执行的代码的执行进行了封装,从使用上看,似乎tornado的更容易,抽象度也更高一些。这篇文章介绍Deferred对象的特性,当函数返回Deferre原创 2016-11-08 23:31:24 · 5471 阅读 · 0 评论 -
Celery教程-------------以守护进程方式运行worker
celery不能以守护进程方式运行自己,需要使用下面的工具:通用的初始化脚本 脚本代码:extra/generic-init.d/ 这个目录包含了celery worker程序通用的初始化脚本,这些脚本应该运行在Linux,FreeBSD,OpenBSD和其它类UNIX平台。初始化脚本:celeryd使用方法:/etc/init.d/celeryd {start|s翻译 2016-06-10 17:24:25 · 16014 阅读 · 2 评论 -
开源爬虫OpenSpider(一)----------------第一次提交
OpenSpider github地址:https://github.com/happyAnger6/OpenSpider主要目的是学习使用python以及各种开源软件实现一个灵活的爬虫框架,这系列文章主要是对实现的过程进行介绍。第一次提交主要实现以下功能:主函数通过tornado库开启20个协程不断的从队列中获取url,直到url队列为空。获取到URL后,将页原创 2016-06-05 18:47:37 · 2974 阅读 · 0 评论 -
Celery用户指引------监控与管理
介绍有一些监控和查看celery集群的工具。这篇文章会介绍其中的一些,另外还有一些关于监控的特性,如果事件和广播命令。Workers命令行管理工具celery也可以用来检查和管理worker节点(和对tasks在一定程度上的管理)。列出所有可用的命令:$ celery help或者获取指定命令的帮助:$ celery --help翻译 2016-06-06 23:01:06 · 11970 阅读 · 1 评论 -
python爬虫实现----github地址
正在不断完善中的一个python爬虫。没有采用多进程多线程,采用协程和tornado异步库实现。github地址:https://github.com/happyAnger6/anger6Spider原创 2016-04-24 23:08:30 · 3588 阅读 · 0 评论 -
rabbitMQ实战(一)---------使用pika库实现hello world
pika是RabbitMQ团队编写的官方Python AMQP库。需要先安装pika:pip3 install pika有较详细的注释,就不再详细说明了生产者代码:hello_world_producer.py:import pika,sys#connect to the rabbitmq,use the default vhostcred原创 2016-05-18 23:29:37 · 4287 阅读 · 0 评论 -
kombu------python的消息库
kombu是一个python的消息库。Kombu的目标是通过为AMQP协议提供一个地道的高层次接口,来使python中的消息编程更为简单。同时也为通用的消息问题提供试验和测试的解决方案。AMQP是先进的消息队列协议,一个提供消息定位,队列,路由,高靠性和安全性的开放的标准协议,其中RabbitMQ消息服务是一个流行的实现。特性通过可扩展的通道允许应用程序支持多种消息翻译 2016-05-17 23:12:02 · 8935 阅读 · 0 评论 -
Celery(二)-----------------使用Celery的第二步
使用Celery的第一步是有意最小化的介绍Celery。本节教程将为你展示Celery提供的更多细节,包括怎样为你的程序和库添加Celery支持。本节教程不会介绍Celery的所有特性和最佳实践,所以建议你也阅读一下用户指引 User Guide。在你的程序中使用Celery我们工程的结构如下:布局:proj/__init__.py /celery.py翻译 2016-05-15 19:52:01 · 13627 阅读 · 0 评论 -
Celery(一)---------使用Celery的第一步
1.什么是任务队列?2.你需要知道的Celery需要一个消息通道来发送和接收消息。RabbitMQ和Redis中间人通道是目前支持的特性。但是Celery也支持很多其它正在实验中的解决方案,如使用SQLite做本地开发。Celery可以运行在一台或多台机器上,甚至可以运行在不同的数据中心上。3.开始如果你是第一次使用Celery或者刚刚从老版本转到Celery3翻译 2016-05-14 19:18:32 · 20409 阅读 · 1 评论 -
tornado用户指引(六)------Tornado web应用程序结构(一)之Applicaton对象
一个基于tornado的web应用程序通常由一个或多个RequestHandler的子类和一个Application对象构成。Application用于将不同的请求路由到相应的RequestHandler.然后 我们在main函数里启动web服务。一个简单的"hello world"的例子如下所示:import tornado.ioloopimport tornado.w原创 2016-05-03 22:47:13 · 4244 阅读 · 0 评论 -
Celery用户指引--------Application
ApplicationCelery库在使用前必须先实例化, 这个实例被称为application(或者简称为'app')。翻译 2016-05-24 23:39:17 · 3835 阅读 · 0 评论 -
tornado用户指引(五)------- 一个并发的web爬虫
QueueTornado的tornado.queue模块为基于协程的应用程序实现了一个异步的生产者/消费者模式。这与python标准库为多线程环境实现的queue模块类似。一个协程执行到yield queue.get会暂停,直到队列中有条目。如果queue有上限,一个协程执行yield queue.put将会暂停,直到队列中有空闲的位置。原创 2016-05-02 11:45:12 · 5394 阅读 · 0 评论