
Python Web 开发
zhangfh1990
这个作者很懒,什么都没留下…
展开
-
基于Python语言使用RabbitMQ消息队列(一)
介绍RabbitMQ 是一个消息中间人(broker): 它接收并且发送消息. 你可以把它想象成一个邮局: 当你把想要寄出的信放到邮箱里时, 你可以确定邮递员会把信送到收信人那里. 在这个比喻中, RabbitMQ 就是一个邮箱, 同时也是一个邮局和邮递员 . 和邮局的主要不同点在于RabbitMQ不处理纸质信件, 而是 接收(accepts), 存储(stores) 和转发(forwards翻译 2017-05-24 14:55:04 · 4964 阅读 · 0 评论 -
Flask和Celery的使用
显示更新状态和结果The above example is overly simple, the background job is started and then the application forgets about it. Most Celery tutorials for web development end right there, 事实上对于很多应用来说,有必要监控它的后台任翻译 2017-09-12 10:33:33 · 4091 阅读 · 3 评论 -
Celery消息队列----配置定时任务
Introduction celery beat is a scheduler; It kicks off tasks at regular intervals, that are then executed by available worker nodes in the cluster.By default the entries are taken from the beat_schedul翻译 2017-08-14 17:45:41 · 8444 阅读 · 0 评论 -
Celery使用快速入门
应用(Application)首先需要一个Celery实例。可以把它叫Celery应用,或直接简略为app。你想要在celery里做的,像创建任务,管理工人(workers),都要以这个实例为入口点。其它模块一定有导入它的可能。在这个教程中,我们让一切都包含在一个模块中,但对于一个更大的项目,你得创建分开的模块。创建一个文件 tasks.py:from celery import Celeryapp翻译 2017-08-21 11:29:21 · 1144 阅读 · 0 评论 -
Celery消息队列----路由任务
基础自动路由最简单的路由方式是使用 task_create_missing_queues 设置 (默认是开启的)。这个设置开启后, 一个在task_queues中还未定义的命名队列会被自动创建。这让简单的路由任务变得很容易。 假如你有两台服务器x 和 y,来处理常规(regular)任务,一个服务器z只处理feed相关的任务。你可以使用这样的配置:Say you have two servers,翻译 2017-08-10 14:20:29 · 5381 阅读 · 0 评论 -
Celery任务队列
什么是任务队列(Task Queue)?使用任务队列作为分发任务的机制。 一个任务队列的输入是一组被称为任务的工作单元。专用的工人会持续监听任务队列来等待完成新的工作。 Celery通过消息进行通信,通常使用中间人作为客户端和工人(workers)间的媒介。为了初始化一项任务,客户端会添加一条消息到队列中,然后中间人传递这条消息给一个worker。一个Celery系统可以包含多个工人和中间人,解翻译 2017-08-17 15:11:58 · 500 阅读 · 0 评论 -
Python装饰器----应用示例(二)
日志记录Logging执行时包装代码的最后一个例子是一个通用的日志记录函数。 考虑下面引起函数调用的装饰器, 运行时间, 结果会被记录:import functoolsimport loggingimport timedef logged(method): """Cause the decorated method to be run and its results logge原创 2017-06-20 12:49:44 · 788 阅读 · 0 评论 -
python装饰器装饰类
Decorating Classes 装饰器可以用来像装饰函数一样装饰类(毕竟类也是可调用对象) 装饰类可以有多种用途。类装饰器可以和被装饰类的属性交互。一个类装饰器可以添加或增强属性,或者它可以修改类的API, 在类如何被定义和它的实例如何被使用之间提供区别.你可能 会问,添加或增强一个类的属性的合适做法不是通过子类么?通常,答案是这样。然而, However, in some si原创 2017-06-19 18:09:40 · 1734 阅读 · 0 评论 -
Python装饰器----应用示例(一)
写装饰器装饰器只不过是一种函数,接收被装饰的可调用对象作为它的唯一参数,然后返回一个可调用对象(就像前面的简单例子) 注意重要的一点,当装饰器被应用到被装饰函数上时,装饰器代码本身就会运行,而不是当被装饰函数被调用时.理解这个很关键,接下来的几个例子的讲解过程也会变得很清楚 一个初始例子: 函数注册 考虑下面的简单函数的注册Consider the following simple r原创 2017-06-18 23:54:44 · 3930 阅读 · 1 评论 -
Python装饰器----概览
装饰器是用来把代码包装住函数或类的工具。装饰器显式地把包装器应用到函数或类上,致使他们“参与”到装饰器的功能当中。装饰器非常的有用,在一个强调函数运行的先决条件的情况下(例如确保身份验证),或者确保函数运行结束后的的清理(例如,输出过滤或异常处理).他们在被装饰方法或类本身上采取行动也有用处。例如,一个装饰器可能用一个 信号系统注册一个函数或者一个URI注册到web应用中。本章提供了什么是装饰器,他翻译 2017-06-18 19:23:36 · 536 阅读 · 0 评论 -
基于Python语言使用RabbitMQ消息队列(六)
远程过程调用(RPC)在第二节里我们学会了如何使用工作队列在多个工人中分布时间消耗性任务。 但如果我们想要运行存在于远程计算机上的方法并等待返回结果该如何去做呢?这就不太一样了,这种模式就是常说的远程过程调用(RPC)。 在本节我们会在本节我们会使用RabbitMQ创建一个RPC系统:一个客户端和一个可扩展(scalable)的RPC服务。由于我们没什么真正的时间消耗型任务去分配,我们就创建一个翻译 2017-05-26 22:50:05 · 2197 阅读 · 0 评论 -
基于Python语言使用RabbitMQ消息队列(五)
Topics在前面教程中我们改进了日志系统,相比较于使用fanout类型交易所只能傻瓜一样地广播,我们用direct获得了选择性接收日志的能力。虽然使用direct类型交易所改进了我们的系统,但它仍然有所限制——它不能做基于多重条件(multiple criteria)的路由。 在日志系统中我们可能不只是想要基于严重级别来订阅日志。也想要基于产生日志的来源。你可能从unix的系统日志工具(sysl翻译 2017-05-26 15:46:46 · 603 阅读 · 0 评论 -
基于Python语言使用RabbitMQ消息队列(四)
路由在上一节我们构建了一个简单的日志系统。我们能够广播消息给很多接收者。在本节我们将给它添加一些特性——我们让它只订阅所有消息的子集。例如,我们只把严重错误(critical error)导入到日志文件(存入磁盘空间),但仍然可以打印所有日志消息到控制台。绑定前面的例子中我们已经创建了绑定,像下面这样:channel.queue_bind(exchange=exchange_name,翻译 2017-05-26 07:44:37 · 816 阅读 · 0 评论 -
基于Python语言使用RabbitMQ消息队列(三)
发布/订阅前面的教程中我们已经创建了一个工作队列。在一个工作队列背后的假设是每个任务恰好会传递给一个工人。在这一部分里我们会做一些完全不同的东西——我们会发送消息给多个消费者。这就是所谓的“发布/订阅”模式。为了解释这种模式,我们将会构建一个简单的日志系统。它包含两个程序——第一个产生日志消息,第二个接收并把他们打印出来。在我们的日志系统中,每一个接收程序的正在运行的拷贝都会获知消息,那样我们将能够翻译 2017-05-25 17:54:15 · 5342 阅读 · 0 评论 -
基于Python语言使用RabbitMQ消息队列(二)
工作队列在第一节我们写了程序来向命名队列发送和接收消息 。在本节我们会创建一个工作队列(Work Queue)用来在多个工人(worker)中分发时间消耗型任务(time-consuming tasks)。工作队列(又叫做: Task Queues)背后的主体思想是 避免立刻去执行耗时任务并且等待它们完成。 相反我们可以安排这样的任务稍后执行. 我们可以把任务封装成一个消息并发送到队列中. 一个在后翻译 2017-05-24 15:50:21 · 1327 阅读 · 0 评论 -
python类的绑定方法与非绑定方法
一、绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的。下面,我们通过实例,来慢慢解析绑定方法的应用。class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): passp =转载 2017-09-12 10:45:03 · 1435 阅读 · 0 评论