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 的使用教程的更多相关文章

  1. Python极其简单的分布式异步作业管理系统RQ入门

    Python极其简单的分布式异步作业管理系统RQ入门 原创 2017-08-19 lixing 生信人 Python极其简单的分布式异步作业管理系统RQ入门 1. 什么是Job? Job直译过来就是工 ...

  2. 简单的异步Socket实现——SimpleSocket_V1.1

    简单的异步Socket实现——SimpleSocket_V1.1 笔者在前段时间的博客中分享了一段简单的异步.net的Socket实现.由于是笔者自己测试使用的.写的很粗糙.很简陋.于是花了点时间自己 ...

  3. gulp:更简单的自动化构建工具

    目前最流行的两种使用JavaScript开发的构建工具是Grunt和Gulp.为什么使用gulp?因为Gulp更简单.Grunt任务拥有大量的配置,会引用大量你实际上并不需要的对象属性,但是Gulp里 ...

  4. Python开发程序:简单主机批量管理工具

    题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * au ...

  5. [Winform]一个简单的账户管理工具

    最近一直觉得注册的账户越来越多,帐号密码神马的容易弄混.自己就折腾了一个简单的账户管理工具,其实实现也挺简单,将每个账户的密码及相关密码提示信息,经aes算法加密之后保存到数据库,当前登录用户可以查询 ...

  6. Android消息机制——时钟显示和异步处理工具类(AsyncTask)

    1. 时钟显示 定义布局文件——activity_my_analog_clock_thread_demo.xml <?xml version="1.0" encoding=& ...

  7. 实现一个简单的http请求工具类

    OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...

  8. 【javascript】Promise/A+ 规范简单实现 异步流程控制思想

    ——基于es6:Promise/A+ 规范简单实现 异步流程控制思想  前言: nodejs强大的异步处理能力使得它在服务器端大放异彩,基于它的应用不断的增加,但是异步随之带来的嵌套.难以理解的代码让 ...

  9. DBUtils-对JDBC简单封装的开源工具类库

    DBUtils 是对JDBC简单封装的开源工具类 详细介绍地址:  https://baike.baidu.com/item/Dbutils/10655914?fr=aladdin 在使用DBUtil ...

随机推荐

  1. 深入理解windows

    阿猫翻译的,用作备忘 深入理解windows——session.window stations.desktops 翻译自:http://www.brianbondy.com/blog/id/100/ ...

  2. 加载程序到android虚拟机报错: android.widget.RelativeLayout cannot be cast to android.widget.Button

    05-23 02:53:48.416: E/Trace(875): error opening trace file: No such file or directory (2) 05-23 02:5 ...

  3. JavaScript版几种常见排序算法

    今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...

  4. oracle--varchar2

    1. varchar2列最多占用4000字节,但是能容纳多少字符就不一定了 使用sql查看字符集: select userenv('language') from dual;--select * fr ...

  5. Spring 循环引用(singleton与prototype初始化的区别)

    原文链接请参见:http://blog.csdn.net/u010723709/article/details/47185959

  6. JavaScript “\”替换成 “\\”

    str=str.replace(/\\/g,'\\\\');

  7. asp.net中web.config配置节点大全详解【转】

    web.config 文件查找规则: (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找. (2)如果当前页面所在目录下不存在web ...

  8. Java Concurrency - ScheduledThreadPoolExecutor

    The Executor framework provides the ThreadPoolExecutor class to execute Callable and Runnable tasks ...

  9. Linux 命令 - free: 显示系统的内存信息

    命令格式 free [-b | -k | -m] [-o] [-s delay ] [-t] [-l] [-V] 命令参数 -b 显示内存的单位为 Byte. -k 显示内存的单位为 KB. -m 显 ...

  10. response小结(二)——文件下载

    我们先来看一个最简单的文件下载的例子: package com.yyz.response; import java.io.FileInputStream; import java.io.IOExcep ...