Python極其簡單的分布式異步作業管理系統RQ入門

2021-03-02 生信人

Python極其簡單的分布式異步作業管理系統RQ入門

1. 什麼是Job?

Job直譯過來就是工作,可以是任意的Python函數,你可以把你想要異步執行的任務都寫成Job函數。簡而言之,Job就是你想執行的操作。例如,我想統計任意網頁的字符數量,可以寫一個這樣的Job函數:

import requestsdef 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 redisfrom rq import Queueredis_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 default16: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 requestsimport redisfrom rq import Queuedef 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_wordsdef 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

相關焦點

  • Python爬蟲從入門到精通只需要三個月
    如何入門Python,為了能夠幫助大家更輕鬆的學好Python開發,Python爬數據,Python數據分析等相關理論知識,給大家共同分享自己一套Python學習生活資料,文章最後面的有附屬的相關資料,無論你是大牛還是小白,是想轉行還是想入行都可以來了解,一起不斷進步以及一起努力學習
  • Python常用庫大全
    環境管理管理 Python 版本和環境的工具p – 非常簡單的交互式 python 版本管理工具。 pyenv – 簡單的 Python 版本管理工具。 web.py – 一個 Python 的 web 框架,既簡單,又強大。 web2py – 一個全棧 web 框架和平臺,專注於簡單易用。 Tornado – 一個web 框架和異步網絡庫。
  • Python協程與異步編程超全總結
    Python中異步IO操作是通過asyncio來實現的。異步IO異步IO的asyncio庫使用事件循環驅動的協程實現並發。用戶可主動控制程序,在認為耗時IO處添加await(yield from)。asyncio.Task用於實現協作式多任務的庫,且Task對象不能用戶手動實例化,通過下面2個函數創建:最簡單的異步IOrun_until_complete():阻塞調用,直到協程運行結束才返回。
  • 為什麼入門大數據選擇Python而不是Java?
    今天我們就來談談學習大數據入門語言的選擇。當然並不只是我個人之見,此外我搜集了各路大神的見解綜合起來跟大家做個討論。java和python的區別到底在哪裡?Java具有簡單性、面向對象、分布式、健壯性、安全性、平臺獨立與可移植性、多線程、動態性等特點 。Java可以編寫桌面應用程式、Web應用程式、分布式系統和嵌入式系統應用程式等。 Python是一種面向對象的解釋型電腦程式設計語言,Python是純粹的自由軟體, 原始碼和解釋器CPython遵循 GPL(GNU General Public License)協議。
  • Python入門教程小孩兒都能學會的零基礎Python學習教程
    本學習路線共分為9個部分(如圖-1):Python語言基礎的學習,掌握python的核心語法;玩轉Linux作業系統,掌握如何使?雲伺服器和Linux作業系統;資料庫入門到實戰,掌握傳統的關係型資料庫以及新興的?關係型資料庫產品的使??法;輕鬆搞定web前端,掌握前端開發最核?
  • 十六本python入門學習書籍推薦,python入門新手必看
    隨著人工智慧時代的到來,python程式語言一步登天衝到編程排行榜第一名,因此更多朋友想轉行學習python程式語言的朋友,可以一起看一下:python入門新手必看的十六本python入門學習書籍1、python基礎教程司維所著圖書:本書包括Python程序設計的方方面面,首先從Python
  • 從零開始學會Python 爬蟲,該怎麼做?
    其實沒那麼玄乎,你只要學會怎樣維護一個所有集群機器能夠有效分享的分布式隊列就好。最簡單的實現是python-rq: https://github.com/nvie/rqrq和Scrapy的結合:darkrho/scrapy-redis · GitHub後續處理,網頁析取(grangier/python-goose · GitHub),存儲(Mongodb)1)
  • Python異步IO實現全過程
    安裝Python3.7以及虛擬環境配置,請參考Python3安裝與配置指南或者虛擬環境入門。有了這些,我們就可以開始了。異步IO的核心是協程,協程是Python生成器方法的一個特定版本。我們先從基礎定義開始,然後再進行構建:協程是一個可以在自身結束之前掛起的方法,並且它可以將控制器傳給其它協程一段時間。之後,你將深入了解到傳統生成器是如何作用於協程的。現在,了解協程的最簡單方法是實現一個協程。現在我們採取一種直觀的方式編寫一些異步IO代碼。
  • 解密平刀異步作業之異步模切作業原理及要素.
    自宏文科技於2014年發布口子膠平刀異步模切工藝以來,平刀異步已經延伸出多種異步模切作業,通過這些不同方法、機型的模切,能給我們生產作業加工帶來不同的省料效果。截止目前,宏文科技研發、在售的異步模切產品機型將近二十種產品。分別為無痕帶刀異步、有痕異步、模內異步、上異步、十字異步、後異步六個大類的平刀異步模切產品。
  • Python 資源大全中文版
    版權是 https://github.com/jobbole/awesome-python-cn具體內容環境管理管理 Python 版本和環境的工具p:非常簡單的交互式 python 版本管理工具。官網pyenv:簡單的 Python 版本管理工具。官網Vex:可以在虛擬環境中執行命令。
  • 淺顯易懂的分布式TensorFlow入門教程
    【導讀】分布式TensorFlow可以有效地提神經網絡訓練速度,但它的使用並不簡單。雖然官方提供了文檔和示例,如連結【1】,但是它們太難懂了。
  • 分布式入門,怎樣用PyTorch實現多GPU分布式訓練
    這篇文章旨在闡述訓練大規模深度學習模型時的分布式計算思想。具體來講,本文首先介紹了分布式計算的基本概念,以及分布式計算如何用於深度學習。然後,列舉了配置處理分布式應用的環境的標準需求(硬體和軟體)。最後,為了提供親身實踐的經驗,本文從理論角度和實現的角度演示了一個用於訓練深度學習模型的分布式算法(同步隨機梯度下降,synchronous SGD)。
  • 尹立博:Python 全局解釋器鎖與並發 | AI 研習社第 59 期猿桌會
    我會先介紹一下全局解釋器鎖 (GIL))的概念和影響;接下來會藉助幾個案例分析來展示 Python 通過多進程、多線程和異步、分布式計算來達成並發的幾種方式;最後會介紹一套分布式計算工具——Dask。全局解釋器鎖 (GIL)GIL 的概念用簡單的一句話來解釋,就是「任一時刻,無論線程多少,單一 CPython 解釋器只能執行一條字節碼」。
  • 小白也能懂的python爬蟲入門案例
    此文屬於入門級級別的爬蟲,老司機們就不用看了。本次主要是爬取網易新聞,包括新聞標題、作者、來源、發布時間、新聞正文。首先我們打開163的網站,我們隨意選擇一個分類,這裡我選的分類是國內新聞。這說明此網頁採用的是異步的方式。也就是通過api接口獲取的數據。那麼確認了之後可以使用F12打開谷歌瀏覽器的控制臺,點擊 Network,我們一直往下拉,發現右側出現了:"… special/00804KVA/cm_guonei_03.js? … "之類的地址,點開Response發現正是我們要找的api接口。
  • 使用Python下載文件的簡單示例
    讓我們創建一個簡單的函數,將響應以塊的形式發送到文件:def url_response(url):path, url = urlr = requests.get(url, stream = True)with
  • Python異步編程模塊asyncio學習
    Python異步編程模塊asyncio學習作者:cxapython | 來源:Python學習開發異步並發的概念對於其他的並發模型大多數採取的都是線性的方式編寫。並且依賴於語言運行時系統或作業系統的底層線程或進程來適當地改變上下文,而基於asyncio的應用要求應用代碼顯示的處理上下文切換。
  • Python快速入門的方法
    現在如果有人問:要把哪門語言作為入門的首選語言?不少人都會回答:Python!因為Python簡單,所以學起來快,有編程經驗的程式設計師一周就能上手Python。但是!Python對有基本的程序概念的人來說很簡單,但對於新手來說真不一定算簡單。
  • Python 從零開始--入門篇
    why pthon為什麼是 python 呢,原因很簡單~嗯哼!就是很簡答相比於 C語言 的指針的混亂,和 Java 的繁瑣,python 更加適合作為非計算機專業的第一個入門的程式語言。(計算機專業最好還是以C語言為第一門語言入門為好,後面寫文章出來介紹)從語法上面來說也擁有更多的第三方庫,避免了很多「重複製造輪子「。能夠很快上手,很多系統也都內置了python環境,相關配置也很簡單。當然除了這些拿來吃飯也是很重要的,時代所需,生活所迫。
  • python入門
    --Yves Hilpisch 《Python for Finance》發現近期學習python的人越來越多了,最近也有人問我有沒有啥課程或者書推薦的。我自己還是側重數據計算和在金融中的應用,系統管理、web開發等沒做過。我當年也是新手入門,自己搜索嘗試,買了很多的書,也在網上下載了很多資料。
  • Python爬蟲學習的完整路線推薦
    爬蟲變得越來越流行,不僅因為它能夠快速爬取海量的數據,更因為有python這樣簡單易用的語言使得爬蟲能夠快速上手。使用異步請求庫進行數據抓取時,會大大提高效率。你可以根據自己的需求選擇合適的請求庫,但建議先從python自帶的urllib開始,當然,你可以在學習時嘗試所有的方式,以便更了解這些庫的使用。