歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

目錄

  • 安裝 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