歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用 Python RQ 的 Python 執行後台任務

使用 Python RQ 的 Python 執行後台任務

日期:2017/3/1 10:22:41   编辑:Linux編程

目錄

  • 安裝 RQ
  • 將任務隊列化
  • 在 Heroku 上發布
  • 調試
  • 擴展閱讀

RQ (Redis Queue) 可以讓 Heroku 平台上的 Python 應用輕松的執行後台任務,RQ 使用 Redis 作為隊列存儲,因此要使用 RQ 之前必須配置應用程序然後啟動並運行一個工作進程。

安裝 RQ

可使用 pip 命令來安裝 RQ 以及其依賴的庫

1 $ pip install rq 2 Downloading/unpacking rq 3 Downloading rq-0.1.2.tar.gz 4 Running setup.py egg_info for package rq 5 ... 6 Successfully installed rq

接下來,記錄新的修改到應用中的 requirements.txt 文件:

1 $ pip freeze > requirements.txt

現在你已經准備好創建 worker 工作進程,創建名為 worker.py 的文件,該模塊將偵聽隊列中的任務並在接收到時處理它們。

01 import os 02 03 import redis 04 from rq import Worker, Queue, Connection 05 06 listen = ['high', 'default', 'low'] 07 08 redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379') 09 10 conn = redis.from_url(redis_url) 11 12 if __name__ == '__main__': 13 with Connection(conn): 14 worker = Worker(map(Queue, listen)) 15 worker.work()

使用下面的命令來運行 workder 進程:

1 $ python worker.py

將作業放到隊列

為了將作業放到 Redis 隊列中,我們在外部模塊中編寫一個堵塞函數 utils.py:

1 import requests 2 3 def count_words_at_url(url): 4 resp = requests.get(url) 5 return len(resp.text.split())

然後在你的應用中可通過如下代碼來創建 RQ 隊列:

1 from rq import Queue 2 from worker import conn 3 4 use_connection(conn) 5 q = Queue()

而將作業放到隊列的方法如下:

1 from utils import count_words_at_url 2 3 result = q.enqueue(count_words_at_url, 'http://heroku.com')

該堵塞方法將自動的在後端的 workder 進程中執行。

發布到 Heroku

為了發布新的 worker 系統到 Heroku 中,你需要在 Procfile 中添加運行命令:

1 rq: 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 2 Scaling rq processes... done, now running 1

調試

通過 -p 參數來查看 worker 進程的輸出信息

1 $ heroku logs -p rq -t

也可以手工調用:

1 $ heroku run python worker.py 2 Running python worker.py attached to terminal... up, run.1
Copyright © Linux教程網 All Rights Reserved