简单的异步任务工具——rq 的使用教程
rq是一个简单的,轻量级的异步任务工具。
如果在网站中用户发起一个用时很久(大于2分钟)的请求,如果用同步的方式,服务器就会返回超时。
这时候就需要用异步请求,用户发起请求后,服务端把作业扔给另一个进程去执行,然后立刻返回给用户,用户再通过轮询或者其他方式来获取作业的执行进度和执行结果。
rq的作用就相当于“另一个进程”。
1.安装
安装python-rq包
pip install rq
2.rq_worker
rq_worker是一个单独的进程,会监听需要执行的任务,并执行。
rq_worker.py
import redis
from rq import Worker, Queue, Connection
listen = ['high', 'default', 'low']
pool = redis.ConnectionPool(db=0, host='localhost', port=6379,
password='passwd')
redis_conn = redis.Redis(connection_pool=pool)
if __name__ == '__main__':
with Connection(redis_conn):
worker = Worker(map(Queue, listen))
worker.work()
启动
python rq_worker.py
3.发布rq作业
1)定义作业执行的函数
funcs.py
def test_func(url, name):
return name
注意的是作业执行的函数和发布任务的模块不能再同一个python文件中,只能通过import来导入。
在这里执行的print的信息会显示在rq_worker的进程中。
from funcs import get_url
from rq import Queue,job
pool = redis.ConnectionPool(db=0, host='localhost', port=6379,
password='passwd')
redis_conn = redis.Redis(connection_pool=pool)
if __name__ == '__main__':
rq_queue=Queue(connection=redis_conn)
job=rq_queue.enqueue(test_func, 'http://www.baidu.com',name='kevin')
先实例化一个Queue类(项目中这个实例可以做成单例)
然后通过enqueue方法,发布任务。第一个参数是执行的function名,后面跟输入给function执行的参数,可以是args也可以是kwargs。
这里会返回一个Job类的实例
4.查看作业执行的情况
发布作业返回的job类,定义位于rq.job文件中,可以去查看一下它的API,主要用到的API有:
print job.result # 如果函数执行正常,返回作业的return,如果有异常,返回None,如果作业没执行,也是返回None
print job.get_status() # 获取作业的状态 queued还在队列中,failed:执行失败,finished 完成
job.set_id('my_id') # 为作业设置一个id,如果没有set_id的操作,作业的id会是一个随机的唯一的字符串
my_id = job.get_id() # 获取作业的id
print job.to_dict() # 把job实例转化成一个字典
job.delete() # 从redis中把该作业删除掉
job.cancel() # 取消作业,尽管作业已经被执行,也可以取消
from rq import job
job.Job.exists(my_id, redis_conn) # 返回是否存在该id的作业
my_job = job.Job(my_id, redis_conn) #创建该作业id的实例
简单的异步任务工具——rq 的使用教程的更多相关文章
- Python极其简单的分布式异步作业管理系统RQ入门
Python极其简单的分布式异步作业管理系统RQ入门 原创 2017-08-19 lixing 生信人 Python极其简单的分布式异步作业管理系统RQ入门 1. 什么是Job? Job直译过来就是工 ...
- 简单的异步Socket实现——SimpleSocket_V1.1
简单的异步Socket实现——SimpleSocket_V1.1 笔者在前段时间的博客中分享了一段简单的异步.net的Socket实现.由于是笔者自己测试使用的.写的很粗糙.很简陋.于是花了点时间自己 ...
- gulp:更简单的自动化构建工具
目前最流行的两种使用JavaScript开发的构建工具是Grunt和Gulp.为什么使用gulp?因为Gulp更简单.Grunt任务拥有大量的配置,会引用大量你实际上并不需要的对象属性,但是Gulp里 ...
- Python开发程序:简单主机批量管理工具
题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * au ...
- [Winform]一个简单的账户管理工具
最近一直觉得注册的账户越来越多,帐号密码神马的容易弄混.自己就折腾了一个简单的账户管理工具,其实实现也挺简单,将每个账户的密码及相关密码提示信息,经aes算法加密之后保存到数据库,当前登录用户可以查询 ...
- Android消息机制——时钟显示和异步处理工具类(AsyncTask)
1. 时钟显示 定义布局文件——activity_my_analog_clock_thread_demo.xml <?xml version="1.0" encoding=& ...
- 实现一个简单的http请求工具类
OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...
- 【javascript】Promise/A+ 规范简单实现 异步流程控制思想
——基于es6:Promise/A+ 规范简单实现 异步流程控制思想 前言: nodejs强大的异步处理能力使得它在服务器端大放异彩,基于它的应用不断的增加,但是异步随之带来的嵌套.难以理解的代码让 ...
- DBUtils-对JDBC简单封装的开源工具类库
DBUtils 是对JDBC简单封装的开源工具类 详细介绍地址: https://baike.baidu.com/item/Dbutils/10655914?fr=aladdin 在使用DBUtil ...
随机推荐
- jquery-ui autocomplete 自动完成功能
效果图
- 【原】CentOS7上安装Xwiki8.2.1
环境 CentOS 7内核版本为 3.10.0-327.el7.x86_64JDK8(jdk1.8.0_101)+Tomcat7.0.67+MySQL5.6.32XWIKI 8.2.1 xwiki- ...
- LeetCode 226
Invert Binary Tree Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 /** ...
- 转: android编译过程(流程图)
- Evaluation of Expression Tree
Evaluation of Expression Tree Given a simple expression tree, consisting of basic binary operators i ...
- LoadRunner 如何进行接口的压力测试
主要压测的时候需要开发提供相关接口文档,或者自己录制.左侧的Name都是开发提供的接口参数名称,Value是相应的参数值.Action为开发给的测试地址.PS:注意在测试的时候设置Controller ...
- js学习笔记—转载(闭包问题)
---恢复内容开始--- 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascrip ...
- Jersey(1.19.1) - Hello World, Get started with Jersey using the embedded Grizzly server
Maven Dependencies The following Maven dependencies need to be added to the pom: <dependency> ...
- asp.net上传文件时出现 404 - 找不到文件或目录。
昨天客户网站反应上传较大文件时出现404-找不到文件或目录的错误.如图: 网站上给出的提示是上传文件不能超过50M,但是在38M和40M这样的文件都不能上传了,显然不对. 在网上查了很久,第一个是检查 ...
- Remoting的入门教程
注:<网摘自http://www.codesky.net/article/200411/48322.html> 基本原理 当客户端创建远程RemotableClass的一个实例,.NET框 ...