当前位置: 首页 > 工具软件 > Python RQ > 使用案例 >

pythonrq模块_使用 Python RQ 的 Python 执行后台任务

顾高扬
2023-12-01

目录

RQ (Redis Queue) 可以让 Heroku 平台上的 Python 应用轻松的执行后台任务,RQ 使用 Redis 作为队列存储,因此要使用 RQ 之前必须配置应用程序然后启动并运行一个工作进程。

安装 RQ

可使用 pip 命令来安装 RQ 以及其依赖的库

$ pip install rq

Downloading/unpacking rq

Downloading rq-0.1.2.tar.gz

Running setup.py egg_info for package rq

...

Successfully installed rq

接下来,记录新的修改到应用中的requirements.txt文件:

$ pip freeze > requirements.txt

现在你已经准备好创建 worker 工作进程,创建名为 worker.py 的文件,该模块将侦听队列中的任务并在接收到时处理它们。

import os

import redis

from rq import Worker, Queue, Connection

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')

conn = redis.from_url(redis_url)

if __name__ == '__main__':

with Connection(conn):

worker = Worker(map(Queue, listen))

worker.work()

使用下面的命令来运行 workder 进程:

$ python worker.py

将作业放到队列

为了将作业放到 Redis 队列中,我们在外部模块中编写一个堵塞函数 utils.py:

import requests

def count_words_at_url(url):

resp = requests.get(url)

return len(resp.text.split())

然后在你的应用中可通过如下代码来创建 RQ 队列:

from rq import Queue

from worker import conn

use_connection(conn)

q = Queue()

而将作业放到队列的方法如下:

from utils import count_words_at_url

result = q.enqueue(count_words_at_url, 'http://heroku.com')

该堵塞方法将自动的在后端的 workder 进程中执行。

发布到 Heroku

为了发布新的 worker 系统到 Heroku 中,你需要在 Procfile 中添加运行命令:

rq: python worker.py

$ heroku addons:add redistogo

----> Adding redistogo to secret-samurai-42... done, v10 (free)

一旦做完上述步骤,可根据需要来设定 worker 的数量:

$ heroku scale rq=1

Scaling rq processes... done, now running 1

调试

通过 -p 参数来查看 worker 进程的输出信息

$ heroku logs -p rq -t

也可以手工调用:

$ heroku run python worker.py

Running python worker.py attached to terminal... up, run.1

扩展阅读

python-rq.org

 类似资料: