本文目錄一覽:
- 1、python任務調度好學嗎
- 2、如何用python做一個設備運維軟件
- 3、如何用python簡單的設計開發異步任務調度隊列
- 4、簡單強大的Python庫!Schedule—實用的周期任務調度工具
- 5、python常用到哪些庫?
python任務調度好學嗎
python任務調度好學。Python由荷蘭數學和計算機科學研究學會的GuidovanRossum於1990年代初設計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。
如何用python做一個設備運維軟件
Python開發的jumpserver跳板機
jumpserver跳板機是一款由Python編寫開源的跳板機(堡壘機)系統,實現了跳板機應有的功能。基於ssh協議來管理,客戶端無需安裝agent。
企業主要用於解決:可視化安全管理
特點:完全開源,GPL授權
Python編寫,Django開發框架,容易再次開發
實現了跳板機基本功能:認證、授權、審計。集成了Ansible、批量命令等。功能強大。
通俗點就是起到監控誰在服務器上做了什麼操作等。錄像回放、命令搜索、實時監控、批量上傳下載等。
第三:Python開發的Magedu分布式監控系統
以自動化運維視角為出發點,自動化功能、監控告警、性能調優,結合saltstack實現自動化配置管理等內容進行了全方位的深入剖析。
企業主要用於解決:自動化監控常用系統服務、應用、網絡設備等。分布式可監控更多服務器,分區域監控再匯總。Zabbix監控結合Python自定義監控腳本。
監控系統需求討論:
監控常用系統服務、應用、網絡設備等?一台主機上可監控多個不同服務、不同服務的監控間隔可不同?同一個服務在不同主機上的監控間隔、報警閾值可不同?告警級別?數據可視化,如何做出簡潔美觀的用戶界面?如何實現單機支持5000+機器監控需求?採取何種通信方式?主動、被動?
第四:Python開發的Magedu的CMDB
cmdb的開發需要包含三部分功能:採集硬件數據、API、頁面管理。
企業主要用於解決:項目功能,採集硬件數據、Api、頁面管理。統計資產,例如服務器存放位置,服務器上的賬號等等。
執行服務的過程如下:服務器的客戶端採集硬件數據,然後將硬件信息發送到API,API負責將獲取到的數據保存到數據庫中,後台管理程序負責對服務器信息的配置和展示。
第五:Python開發的任務調度系統
Python任務調度系統的multiprocessing模塊不但支持多進程,其中managers子模塊還支持把多進程分布到多台機器上。
企業主要用於解決:通俗的理解,批量管理crontab定時任務。原理用戶通過web頁面設置任務,傳輸到任務調度系統服務器上的客戶端,客戶端收集數據反饋給服務器端,服務器端根據任務具體內容調度後端的集群服務器做定時任務。
一個服務進程可以作為調度者,將任務分布到其他多個機器的多個進程中,依靠網絡通信。想到這,就在想是不是可以使用此模塊來實現一個簡單的作業調度系統。
第六:Python運維流程系統
使用python語言編寫的調度和監控工作流的平台內部用來創建、監控和調整數據管道。任何工作流都可以在這個使用Python來編寫的平台上運行。
企業主要用於解決:通俗點說就是規範運維的操作,加入審批,一步一步操作的概念。
是一種允許工作流開發人員輕鬆創建、維護和周期性地調度運行工作流(即有向無環圖或成為DAGs)的工具。這些工作流包括了如數據存儲、增長分析、Email發送、A/B測試等等這些跨越多部門的用例。
這個平台擁有和 Hive、Presto、MySQL、HDFS、Postgres和S3交互的能力,並且提供了鉤子使得系統擁有很好地擴展性。除了一個命令行界面,該工具還提供了一個基於Web的用戶界面讓您可以可視化管道的依賴關係、監控進度、觸發任務等。
來個小總結
如何用python簡單的設計開發異步任務調度隊列
首先,客戶端可以直接扔任務到一個web services的接口上 –》 web api接收到任務後,會根據客戶端的ip和時間戳做task_id,返回給客戶,緊接着在redis裡面標記這任務的狀態。 格式為 func,args,kwargs,timeout=xx,queue_level=xx,interval_time=xx
主服務端:
一個線程,會不停的掃描那個redis hash表,取出任務的interval_time後,進行取模,如果匹配成功,就會塞到 redis sorted set有續集和裡面。
主線程,會不停的看看sorted set裡面,有沒有比自己實現小的任務,有的話,執行並刪除。 這裡的執行是用多進程,為毛用多進程,因為線程很多時候是不好控制強制幹掉的。 每個任務都會用multiprocessing的方式去執行,去調用的時候,會多傳進一個task_id,用來把相關的進度推送到redis裡面。 另外,fork進程後,我會得到一個pid,我會把pid和timeout的信息,存放到kill_hash裡面。 然後會不間斷的查看,在指定的timeout內,這pid還在不在,如果還是存在,沒有退出的話,說明他的任務不太正常,我們就可以在main(),裡面幹掉這些任務。
所謂的優先級就是個 High + middle +Low 的三合一鏈條而已,我每次都會堅持從高到低取任務,如果你的High級別的任務不斷的話,那麼我會一直幹不了低級別的任務了。 代碼的體現是在redis sorted set這邊,設立三個有序集合,我的worker隊列會從high開始做……
那麼如果想幹掉一個任務是如何操作的,首先我需要在 kill_hash 裡面標記任務應該趕緊幹掉,在就是在task_hash裡面把那個task_id幹掉,好讓他不會被持續的加入待執行的隊列裡面。
簡單強大的Python庫!Schedule—實用的周期任務調度工具
如果你想在Linux服務器上周期性地執行某個 Python 腳本,最出名的選擇應該是 Crontab 腳本,但是 Crontab 具有以下缺點:
1.不方便執行 秒級的任務 。
2.當需要執行的定時任務有上百個的時候,Crontab的 管理就會特別不方便 。
另外一個選擇是 Celery,但是 Celery 的配置比較麻煩,如果你只是需要一個輕量級的調度工具,Celery 不會是一個好選擇。
在你想要使用一個輕量級的任務調度工具,而且希望它盡量簡單、容易使用、不需要外部依賴,最好能夠容納 Crontab 的所有基本功能,那麼 Schedule 模塊是你的不二之選。
使用它來調度任務可能只需要幾行代碼,感受一下:
上面的代碼表示每10分鐘執行一次 job 函數,非常簡單方便。你只需要引入 schedule 模塊,通過調用 scedule.every(時間數).時間類型.do(job) 發布周期任務。
發布後的周期任務需要用 run_pending 函數來檢測是否執行,因此需要一個 While 循環不斷地輪詢這個函數。
下面具體講講Schedule模塊的安裝和初級、進階使用方法。
1.準備
請選擇以下任一種方式輸入命令安裝依賴 :
1. Windows 環境 打開 Cmd (開始-運行-CMD)。
2. MacOS 環境 打開 Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
2.基本使用
最基本的使用在文首已經提到過,下面給大家展示更多的調度任務例子:
可以看到,從月到秒的配置,上面的例子都覆蓋到了。不過 如果你想只運行一次任務 的話,可以這麼配:
參數傳遞
如果你有參數需要傳遞給作業去執行,你只需要這麼做:
獲取目前所有的作業
如果你想獲取目前所有的作業:
取消所有作業
如果某些機制觸發了,你需要立即清除當前程序的所有作業:
標籤功能
在設置作業的時候,為了後續方便管理作業,你可以給作業打個標籤,這樣你可以通過標籤過濾獲取作業或取消作業。
設定作業截止時間
如果你需要讓某個作業到某個時間截止,你可以通過這個方法:
截止日期之後,該作業將無法運行。
立即運行所有作業,而不管其安排如何
如果某個機制觸發了,你需要立即運行所有作業,可以調用 schedule.run_all :
3.高級使用
裝飾器安排作業
如果你覺得設定作業這種形式太啰嗦了,也可以使用裝飾器模式:
並行執行
默認情況下,Schedule 按順序執行所有作業。其背後的原因是,很難找到讓每個人都高興的並行執行模型。
不過你可以通過多線程的形式來運行每個作業以解決此限制:
日誌記錄
Schedule 模塊同時也支持 logging 日誌記錄,這麼使用:
效果如下:
異常處理
Schedule 不會自動捕捉異常,它遇到異常會直接拋出,這會導致一個嚴重的問題: 後續所有的作業都會被中斷執行 ,因此我們需要捕捉到這些異常。
你可以手動捕捉,但是某些你預料不到的情況需要程序進行自動捕獲,加一個裝飾器就能做到了:
這樣, bad_task 在執行時遇到的任何錯誤,都會被 catch_exceptions 捕獲,這點在保證調度任務正常運轉的時候非常關鍵。
python常用到哪些庫?
Python作為一個設計優秀的程序語言,現在已廣泛應用於各種領域,依靠其強大的第三方類庫,Python在各個領域都能發揮巨大的作用。
下面我們就來看一下python中常用到的庫:
數值計算庫:
1. NumPy
支持多維數組與矩陣運算,也針對數組運算提供大量的數學函數庫。通常與SciPy和Matplotlib一起使用,支持比Python更多種類的數值類型,其中定義的最重要的對象是稱為ndarray的n維數組類型,用於描述相同類型的元素集合,可以使用基於0的索引訪問集合中元素。
2. SciPy
在NumPy庫的基礎上增加了眾多的數學、科學及工程計算中常用的庫函數,如線性代數、常微分方程數值求解、信號處理、圖像處理、稀疏矩陣等,可進行插值處理、信號濾波,以及使用C語言加速計算。
3. Pandas
基於NumPy的一種工具,為解決數據分析任務而生。納入大量庫和一些標準的數據模型,提供高效地操作大型數據集所需的工具及大量的能快速便捷處理數據的函數和方法,為時間序列分析提供很好的支持,提供多種數據結構,如Series、Time-Series、DataFrame和Panel。
數據可視化庫:
4. Matplotlib
第一個Python可視化庫,有許多別的程序庫都是建立在其基礎上或者直接調用該庫,可以很方便地得到數據的大致信息,功能非常強大,但也非常複雜。
5. Seaborn
利用了Matplotlib,用簡潔的代碼來製作好看的圖表。與Matplotlib最大的區別為默認繪圖風格和色彩搭配都具有現代美感。
6. ggplot
基於R的一個作圖庫ggplot2,同時利用了源於《圖像語法》(The Grammar of Graphics)中的概念,允許疊加不同的圖層來完成一幅圖,並不適用於製作非常個性化的圖像,為操作的簡潔度而犧牲了圖像的複雜度。
7. Bokeh
跟ggplot一樣,Bokeh也基於《圖形語法》的概念。與ggplot不同之處為它完全基於Python而不是從R處引用。長處在於能用於製作可交互、可直接用於網絡的圖表。圖表可以輸出為JSON對象、HTML文檔或者可交互的網絡應用。
8. Plotly
可以通過Python notebook使用,與Bokeh一樣致力於交互圖表的製作,但提供在別的庫中幾乎沒有的幾種圖表類型,如等值線圖、樹形圖和三維圖表。
9. pygal
與Bokeh和Plotly一樣,提供可直接嵌入網絡瀏覽器的可交互圖像。與其他兩者的主要區別在於可將圖表輸出為SVG格式,所有的圖表都被封裝成方法,且默認的風格也很漂亮,用幾行代碼就可以很容易地製作出漂亮的圖表。
10. geoplotlib
用於製作地圖和地理相關數據的工具箱。可用來製作多種地圖,比如等值區域圖、熱度圖、點密度圖。必須安裝Pyglet(一個面向對象編程接口)方可使用。
11. missingno
用圖像的方式快速評估數據缺失的情況,可根據數據的完整度對數據進行排序或過濾,或者根據熱度圖或樹狀圖對數據進行修正。
web開發庫:
12. Django
一個高級的Python Web框架,支持快速開發,提供從模板引擎到ORM所需的一切東西,使用該庫構建App時,必須遵循Django的方式。
13. Socket
一個套接字通訊底層庫,用於在服務器和客戶端間建立TCP或UDP連接,通過連接發送請求與響應。
14. Flask
一個基於Werkzeug、Jinja 2的Python輕量級框架(microframework),默認配備Jinja模板引擎,也包含其他模板引擎或ORM供選擇,適合用來編寫API服務(RESTful rervices)。
15. Twisted
一個使用Python實現的基於事件驅動的網絡引擎框架,建立在deferred object之上,一個通過異步架構實現的高性能的引擎,不適用於編寫常規的Web Apps,更適用於底層網絡。
數據庫管理:
16. MySQL-python
又稱MySQLdb,是Python連接MySQL最流行的一個驅動,很多框架也基於此庫進行開發。只支持Python 2.x,且安裝時有許多前置條件。由於該庫基於C語言開發,在Windows平台上的安裝非常不友好,經常出現失敗的情況,現在基本不推薦使用,取代品為衍生版本。
17. mysqlclient
完全兼容MySQLdb,同時支持Python 3.x,是Django ORM的依賴工具,可使用原生SQL來操作數據庫,安裝方式與MySQLdb一致。
18. PyMySQL
純Python實現的驅動,速度比MySQLdb慢,最大的特點為安裝方式簡潔,同時也兼容MySQL-python。
19. SQLAlchemy
一種既支持原生SQL,又支持ORM的工具。ORM是Python對象與數據庫關係表的一種映射關係,可有效提高寫代碼的速度,同時兼容多種數據庫系統,如SQLite、MySQL、PostgreSQL,代價為性能上的一些損失。
自動化運維:
20. jumpsever跳板機
一種由Python編寫的開源跳板機(堡壘機)系統,實現了跳板機的基本功能,包含認證、授權和審計,集成了Ansible、批量命令等。
支持WebTerminal Bootstrap編寫,界面美觀,自動收集硬件信息,支持錄像回放、命令搜索、實時監控、批量上傳下載等功能,基於SSH協議進行管理,客戶端無須安裝agent。主要用於解決可視化安全管理,因完全開源,容易再次開發。
21. Magedu分布式監控系統
一種用Python開發的自動化監控系統,可監控常用系統服務、應用、網絡設備,可在一台主機上監控多個不同服務,不同服務的監控間隔可以不同,同一個服務在不同主機上的監控間隔、報警閾值可以不同,並提供數據可視化界面。
22. Magedu的CMDB
一種用Python開發的硬件管理系統,包含採集硬件數據、API、頁面管理3部分功能,主要用於自動化管理筆記本、路由器等常見設備的日常使用。由服務器的客戶端採集硬件數據,將硬件信息發送至API,API負責將獲取的數據保存至數據庫中,後台管理程序負責對服務器信息進行配置和展示。
23. 任務調度系統
一種由Python開發的任務調度系統,主要用於自動化地將一個服務進程分布到其他多個機器的多個進程中,一個服務進程可作為調度者依靠網絡通信完成這一工作。
24. Python運維流程系統
一種使用Python語言編寫的調度和監控工作流的平台,內部用於創建、監控和調整數據管道。允許工作流開發人員輕鬆創建、維護和周期性地調度運行工作流,包括了如數據存儲、增長分析、Email發送、A/B測試等諸多跨多部門的用例。
GUI編程:
25. Tkinter
一個Python的標準GUI庫,可以快速地創建GUI應用程序,可以在大多數的UNIX平台下使用,同樣可以應用在Windows和Macintosh系統中,Tkinter 8.0的後續版本可以實現本地窗口風格,並良好地運行在絕大多數平台中。
26. wxPython
一款開源軟件跨平台GUI庫wxWidgets的Python封裝和Python模塊,是Python語言的一套優秀的GUI圖形庫,允許程序員很方便地創建完整的、功能健全的GUI用戶界面。
27. PyQt
一個創建GUI應用程序的工具庫,是Python編程語言和Qt的成功融合,可以運行在所有主要操作系統上,包括UNIX、Windows和Mac。PyQt採用雙許可證,開發人員可以選擇GPL和商業許可,從PyQt的版本4開始,GPL許可證可用於所有支持的平台。
28. PySide
一個跨平台的應用程式框架Qt的Python綁定版本,提供與PyQt類似的功能,並相容API,但與PyQt不同處為其使用LGPL授權。
更多Python知識請關注Python自學網。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246515.html