Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 使用 Python RQ 的 Python 执行后台任务

目录

  • 安装 RQ
  • 将任务队列化
  • 在 Heroku 上发布
  • 调试
  • 扩展阅读
RQ (Redis Queue) 可以让 Heroku 平台上的 Python 应用轻松的执行后台任务,RQ 使用 Redis 作为队列存储,因此要使用 RQ 之前必须配置应用程序然后启动并运行一个工作进程。

安装 RQ

可使用 pip 命令来安装 RQ 以及其依赖的库 
1$ pip install rq
2Downloading/unpacking rq
3  Downloading rq-0.1.2.tar.gz
4  Running setup.py egg_info for package rq
5  ...
6Successfully installed rq
接下来,记录新的修改到应用中的 requirements.txt 文件: 
1$ pip freeze > requirements.txt
现在你已经准备好创建 worker 工作进程,创建名为 worker.py 的文件,该模块将侦听队列中的任务并在接收到时处理它们。 
01import os
02  
03import redis
04from rq import Worker, Queue, Connection
05  
06listen = ["high", "default", "low"]
07  
08redis_url = os.getenv("REDISTOGO_URL", "redis://localhost:6379"
09  
10conn = redis.from_url(redis_url)
11  
12if __name__ == "__main__":
13    with Connection(conn):
14        worker = Worker(map(Queue, listen))
15        worker.work()
使用下面的命令来运行 workder 进程: 
1$ python worker.py

将作业放到队列

为了将作业放到 Redis 队列中,我们在外部模块中编写一个堵塞函数 utils.py: 
1import requests
2  
3def count_words_at_url(url):
4    resp = requests.get(url)
5    return len(resp.text.split())
然后在你的应用中可通过如下代码来创建 RQ 队列: 
1from rq import Queue
2from worker import conn
3  
4use_connection(conn)
5q = Queue()
而将作业放到队列的方法如下: 
1from utils import count_words_at_url
2  
3result = q.enqueue(count_words_at_url, "http://heroku.com"
该堵塞方法将自动的在后端的 workder 进程中执行。

发布到 Heroku

为了发布新的 worker 系统到 Heroku 中,你需要在 Procfile 中添加运行命令: 
1rq: python worker.py
然后添加 Redis To Go 扩展: 
1$ heroku addons:add redistogo
2----> Adding redistogo to secret-samurai-42... done, v10 (free
一旦做完上述步骤,可根据需要来设定 worker 的数量: 
1$ heroku scale rq=1
2Scaling rq processes... done, now running 1

调试

通过 -p 参数来查看 worker 进程的输出信息 
1$ heroku logs -p rq -t
也可以手工调用: 
1$ heroku run python worker.py
2Running python worker.py attached to terminal... up, run.1