资讯专栏INFORMATION COLUMN

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

Chiclaim / 3545人阅读

摘要:极其简单的分布式异步作业管理系统入门什么是直译过来就是工作,可以是任意的函数,你可以把你想要异步执行的任务都写成函数。简而言之,就是你想执行的操作。一个完整的例子启动运行

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

Job直译过来就是工作,可以是任意的Python函数,你可以把你想要异步执行的任务都写成Job函数。简而言之,Job就是你想执行的操作。例如,我想统计任意网页的字符数量,可以写一个这样的Job函数:

import requests

def count_words(url):
    return len(requests.get(url).text.split())

这样一个函数就可以称之为Job。

2. 什么是Queue?

当我有很多Job时,假如我现在有3个Job,分别是j1、j2、j3,那么当计算机要执行这些任务的时候,会按照j1、j2、j3加入的顺序来执行这些Job,这样的一个可以忘里面添加Job,并且能够顺序执行队列称之为Queue。

例如,我们可以这样来构建一个Queue:

import redis
from rq import Queue


redis_conn = redis.Redis()
q = Queue("default", connection=redis_conn)  # 第一个参数是Queue的名称,可以不传,默认为default
3. 怎么把Job放到队列里面去?
j = q.enqueue(count_words, args=("https://www.baidu.com",))

enqueue第一参数是Job函数,args是Job函数的参数,关键字参数可以通过kwargs传入。

4. 什么是Worker?

Worker是Job的消费者,简单来说,你把很多Job加入到了Queue,谁来运行这些Job呢?当然就是Worker啦,你也可以看出Worker必须是独立的进程,这个进程从Redis里面获取Job的信息(包括函数、参数等等),然后运行这个Job。

启动Worker进程也很简单:

$ rq worker low high default
16:56:02 RQ worker "rq:worker:s2.6443" started, version 0.8.1                                            
16:56:02 Cleaning registries for queue: low         
16:56:02 Cleaning registries for queue: high        
16:56:02 Cleaning registries for queue: default     
16:56:02                                            
16:56:02 *** Listening on low, high, default...

后面的三个参数low、high、default,就是这个Worker将要运行哪些Queue里面的Job,这个顺序很重要,排在前面的Queue里面的Job将优先被运行。

5. 一个完整的例子

jobs.py

import requests
import redis
from rq import Queue


def count_words(url):
    return len(requests.get(url).text.split())
    
def get_q():
    redis_conn = redis.Redis()
    return Queue(connection=redis_conn)

app.py

from jobs import get_q, count_words

def run():
    q = get_q()
    j = e.enqueue(count_words, "https://www.baidu.com")
    print(j.result)
    
if __name__ == "__main__":
    run()

启动Worker:

$ rq worker

运行:

$ python app.py

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40718.html

相关文章

  • APScheduler任务调度利器

    摘要:中任务调度一般用中的任务调度工具也有不少等。调度器配置示例方式一方式二三略。移除调用放到,参数为调用实例的方法注意如果任务已经调度完毕,并且之后也不会再被执行的情况下,会被自动移除。可以监听调度任务执行情况相关的事件。 Java中任务调度一般用Quartz,Python中的任务调度工具也有不少:Celery,RQ,APScheduler等。Celery:非常强大的分布式任务调度框架RQ...

    Flink_China 评论0 收藏0
  • 重磅 | 完备 AI 学习路线,最详细资源整理!

    摘要:是你学习从入门到专家必备的学习路线和优质学习资源。的数学基础最主要是高等数学线性代数概率论与数理统计三门课程,这三门课程是本科必修的。其作为机器学习的入门和进阶资料非常适合。书籍介绍深度学习通常又被称为花书,深度学习领域最经典的畅销书。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【导读】本文由知名开源平...

    荆兆峰 评论0 收藏0
  • Algorithms, Princeton, Coursera课程整理与回顾

    摘要:除特别标注外,文章非原创插图全部来自课程相关资源。剧透预警内容包含大作业的关键问题解法分析。为的返回值此方案下,判断只需要对应,判断使用结果准确,判断检测的对应是否为。更新此方法已确定违反的。 Princeton的算法课是目前为止我上过的最酣畅淋漓的一门课,得师如此夫复何求,在自己的记忆彻底模糊前,愿对这其中一些印象深刻的点做一次完整的整理和回顾,以表敬意。 注:这是一篇更关注个人努力...

    Luosunce 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<