简单的异步任务工具——rq 的使用教程 简单的异步任务工具——rq 的使用教程 Python 并行分布式框架 Celery

 

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的实例


Python 并行分布式框架 Celery

Celery 官网:http://www.celeryproject.org
Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html
Celery 官方文档中文版:http://docs.jinkan.org/docs/celery

celery配置:http://docs.jinkan.org/docs/celery/configuration.html#configuration

参考:http://www.cnblogs.com/landpack/p/5564768.html    http://blog.csdn.net/happyAnger6/article/details/51408266

http://www.cnblogs.com/forward-wang/p/5970806.html

分布式队列神器 Celery:https://segmentfault.com/a/1190000008022050
celery最佳实践:https://my.oschina.net/siddontang/blog/284107
Celery 分布式任务队列快速入门:http://www.cnblogs.com/alex3714/p/6351797.html
异步任务神器 Celery 快速入门教程:https://blog.csdn.net/chenqiuge1984/article/details/80127446
定时任务管理之python篇celery使用:http://student-lp.iteye.com/blog/2093397
异步任务神器 Celery:http://python.jobbole.com/87086/
celery任务调度框架实践:https://blog.csdn.net/qq_28921653/article/details/79555212
Celery-4.1 用户指南: Monitoring and Management Guide:https://blog.csdn.net/libing_thinking/article/details/78592801
Celery安装及使用:https://blog.csdn.net/u012325060/article/details/79292243
Celery学习笔记(一):https://blog.csdn.net/sdulsj/article/details/73741350

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的实例


Python 并行分布式框架 Celery

Celery 官网:http://www.celeryproject.org
Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html
Celery 官方文档中文版:http://docs.jinkan.org/docs/celery

celery配置:http://docs.jinkan.org/docs/celery/configuration.html#configuration

参考:http://www.cnblogs.com/landpack/p/5564768.html    http://blog.csdn.net/happyAnger6/article/details/51408266

http://www.cnblogs.com/forward-wang/p/5970806.html

分布式队列神器 Celery:https://segmentfault.com/a/1190000008022050
celery最佳实践:https://my.oschina.net/siddontang/blog/284107
Celery 分布式任务队列快速入门:http://www.cnblogs.com/alex3714/p/6351797.html
异步任务神器 Celery 快速入门教程:https://blog.csdn.net/chenqiuge1984/article/details/80127446
定时任务管理之python篇celery使用:http://student-lp.iteye.com/blog/2093397
异步任务神器 Celery:http://python.jobbole.com/87086/
celery任务调度框架实践:https://blog.csdn.net/qq_28921653/article/details/79555212
Celery-4.1 用户指南: Monitoring and Management Guide:https://blog.csdn.net/libing_thinking/article/details/78592801
Celery安装及使用:https://blog.csdn.net/u012325060/article/details/79292243
Celery学习笔记(一):https://blog.csdn.net/sdulsj/article/details/73741350