疯哥哥带你飞

世间风云兮幻亦真,天地无穷兮大道行

1. Tornado实现聊天室

Tornado的异步I/O机制使其很适合处理长连接的场景,在官方提供的Demo中就有一个简单的聊天室实现,大致做法如下: 1. 提供一个全局的消息缓存 2. 每次获取新消息时,如果缓存中没有新消息出现,则一直等待 3. 前端使用ajax不断轮询新消息并显示,当没有新消息时,意味着前端会和to...

2018-08-10 16:45:24

阅读数 746

评论数 0

1. RabbitMQ安装

RabbitMQ作为消息队列,在分布式系统中具有举足轻重的作用,能够方便地解耦各个组件;OpenStack之所以具有高扩展性,RabbitMQ功不可没。虽然一直都在用,但没有进行过系统的学习,最近借着学习Celery的机会,也计划对RabbitMQ进行深入一点的了解。下面学习下RabbitMQ在U...

2018-03-24 16:16:10

阅读数 58

评论数 0

6. 消息发送重试

当连接失败,Celery会自动重试发送消息,我们可以对重试行为进行设置,譬如说多久重试一次、最大重试次数或者干脆不重试! 当然这只是官方文档说的,我在Windows上进行测试,故意设置了局域网中没有使用的ip地址作为broker的地址,本来以为会像文档中讲的那样,在重试3次后返回并提示错误,结果...

2018-03-23 18:35:08

阅读数 169

评论数 0

5. 任务状态追踪on_message

Celery支持捕获任务的所有状态变化,通过设置on_message回调函数,然后我写了以下代码,开始进行测试::import time from celery import Celery from celery import states app = Celery('tasks', ...

2018-03-23 16:53:12

阅读数 400

评论数 0

4. 任务限速Rate Limits

Celery真的有好多实用的特性,譬如今天学习的速率限制Rate Limits:我们在很多应用场景下可能需要对某些优先级不太高的任务进行限速,否则当此类任务产生的速度过快时,导致worker疲于奔命,从而导致高优先级的任务被饿死;此时Rate Limits就可以起作用了,我们可以给每个任务设置它们...

2018-03-22 18:49:46

阅读数 185

评论数 0

多重继承

Python支持多重继承,但是多重继承势必会造成很多问题,譬如二义性;举栗子,假设类A继承类B和类C,类B和类C都实现了foo()方法,那么类A的实例对象在调用foo方法时, 是调用类B还是类C中的foo呢?Python中用于解决这种问题的算法就是MRO(Method Resolution Ord...

2018-03-21 21:22:03

阅读数 28

评论数 0

3. Celery之主模块名字

我们在创建一个Celery app的时候,第一个参数需要指定主模块名字,大多数情况下我们都很随意,譬如用__name__; 这可能就造成了一个问题: 你使用Python解释器执行主模块来运行worker,然后client通过导入任务来异步执行某个任务,那么就会发现worker会如下错误:[2018...

2018-03-21 17:21:37

阅读数 451

评论数 0

2. Celery Bug: ValueError: need more than 0 values to unpack

按照Celery的官方文档,开始学习最简单的示例add,结果Celery worker收到任务后就报错了,错误堆栈如下:[2018-03-21 09:43:23,123: INFO/SpawnPoolWorker-2] child process 4404 calling sel f.run() ...

2018-03-21 10:08:21

阅读数 375

评论数 0

1. 开启Celery系统学习之路

在开发Web的过程中,用户可能在前端向后端提交一个比较费时的任务,那么显然不适宜在后端通过同步的方式进行处理;经过调研,选择了Celery这个分布式任务队列来进行解决,思路大致如下:1. 用户在前端提交一个任务2. 后端通过消息中间件向Celery worker传递此任务3. Celery wor...

2018-03-21 10:00:21

阅读数 71

评论数 0

8. 事务隔离级别: 总结

通过前面的学习,我们可以总结出Mysql的4种事务隔离级别可能产生的问题如下所示:事务隔离界别脏读不可重复读幻读Read-Uncommitted(读未提交)有有有Read-Committed(读已提交)无有有Repeatable-Read(可重复读)无无有Serializable(可串行化)无无无...

2018-03-20 13:03:01

阅读数 116

评论数 0

7.事务隔离级别之Serializable

最后我们学习一下最高的事务隔离级别Serializable,顾名思义,可串行化的,也即并发事务串行执行。很显然,该级别可以避免前面讲到的所有问题:“脏读”、“不可重复读”和“幻读”。代价是处理事务的吞吐量低,严重浪费数据库的性能,因此要慎用此事务隔离级别。下面演示Serializable如何解决这...

2018-03-20 12:51:14

阅读数 699

评论数 2

6. 事务隔离级别之Repeatable Read

接下来我们学习Mysql默认的事务隔离级别Repeatable Read,顾名思义,可重复读,也即在一个事务范围内相同的查询会返回相同的数据。延续上面的栗子:1. 小明很开心自己考了69分,于是他连接到数据库查询自己的成绩来炫耀给小伙伴,由于Repeatable Read是默认的事务隔离级别,因此...

2018-03-20 11:32:09

阅读数 425

评论数 0

5. 事务隔离级别之Read Committed

这篇我们学习事务隔离级别Read Committed,顾名思义,就是读已提交,一个事务只能看到其他并发的已提交事务所作的修改。很显然,该级别可以解决Read Uncommitted中出现的“脏读“问题。除了Mysql,很多数据库都以Read Committed作为默认的事务隔离级别。下面通过例子来...

2018-03-20 11:03:43

阅读数 2019

评论数 0

4. 事务隔离级别之Read Uncommitted

前面我们说过,要获得最高的事务隔离性,可以采取序列化/串行的方式,代价是严重影响系统处理事务的吞吐量。就好像数据库是个多核CPU,事务串行后,那么意味着我们总是在使用单核,没办法发挥多核CPU的并行威力。基于以上这个问题,大多数的数据库实现都为使用者提供了多个事务隔离级别;Mysql提供的事务隔离...

2018-03-20 10:26:50

阅读数 2285

评论数 0

3. 数据库事务

我们在开发数据库应用时,会遇到类似以下的场景:假设有个表users(id pk,name,age,sex)用于存放用户信息,有个表blogs(id pk, user_id fk, title, content)用于存放用户记录的博客信息,blogs的user_id字段记录博客拥有者的id。现在,我...

2018-03-20 09:56:22

阅读数 71

评论数 0

HTTP基本认证

在最近的项目中,需要实现一个客户端,通过HTTP协议访问Web服务器,即C/S架构。使用客户端的功能前需要先进行登录认证,原本的设计是:客户端登录成功后,维护一个COOKIE用于保持当前的登录状态。但是最终的做法是,采用了”HTTP基本认证“,就是将用户的用户名和密码放在HTTP请求头部的Auth...

2018-03-19 14:51:58

阅读数 189

评论数 0

2. AUTO_INCREMENT 自增列

有些场景下,我们可能需要使用到自增列AUTO_INCREMENT,自增列必须为整数,当插入的数据中该字段值为0、或者不给值、给默认值,给null值,会触发自增,即系统会从该字段下当前的最大值进行+1操作然后赋给当前插入的记录。自增列有如下限制:1. 自增列必须为整数数据类型mysql&am...

2018-03-18 21:49:24

阅读数 63

评论数 0

1.内(外)连接、左(外)连接、右连接

目前有2个表:users和scores,它们的数据如下:可见, id为1的xiaoming在scores中没有对应的记录,同样,user_id为5的score在users中没有对应的记录mysql> SELECT * FROM users; +----+----------+...

2018-03-18 20:48:18

阅读数 47

评论数 0

生成器generator

Python提供了一个高级特性: 生成器,顾名思义,生成器就是不断生成结果的对象;那生成器有什么好处呢?假设我们现在需要对1亿以内的正整数做一个统计操作,那如果我们一次生成这么多整数,势必需要占用很大的内存空间,但是我们一次生成一个整数,然后下一次生成下一个整数,那么就只需要很少的内存即可,这里就...

2018-03-18 11:36:07

阅读数 55

评论数 0

可迭代对象Iterable、迭代器Iterator

如果一个对象实现了__iter__方法,那么就是可迭代的IterablePython的collections模块提供了Iterable和Iterator这两个抽象类,可以让我们检测一个对象是否是可迭代的以及是否是迭代器In [16]: class MyIterable(object): ....

2018-03-18 11:16:18

阅读数 93

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭