cmdb 資產採集採用中控機for 迴圈主機列表挨個針對主機進行遠端資產採集並且提交資料到api,此方式為乙個乙個的資料採集並提交,在主機數量龐大的請況下此方式嚴重耗時。
再次引入執行緒池方式,例如建立10個執行緒,每次10個執行緒同時採集10個主機資訊並且入庫,先執行完任務的執行緒繼續採集後面的主機資訊,一直保持10執行緒同時執行任務。
importview coderequests
import
json
deftask(host):
info = #
採集主機的資產資訊
url = "
"r1 = requests.post( #
資產入庫
url=url,
data=json.dumps(info).encode('
utf-8
') #
對於字典等特殊資料格式需要json 對資料格式化處理,再編碼才能傳輸
)
(r1.text)
defssh():
r1 = requests.get(url='
') #
先獲取要採集資產資訊的主機列表資訊
host_list =r1.json()
from concurrent.futures import threadpoolexecutor #
建立執行緒池
pool = threadpoolexecutor(10)
for host in
host_list:
pool.submit(task,host)
#host 作為引數帶入task函式中,每次執行10個task 函式任務
在for 迴圈中執行任務時,根據for 迴圈的列表元素挨個順序執行,引入執行緒池後,將每個迴圈執行的任務定義成函式task,將for 迴圈的主機名作為引數帶入任務函式task 中,定義了多少執行緒池數量,就同時執行幾個task 任務。
執行緒池數量不是越多越好,根據任務數量以及主機的cpu 等效能決定
python 執行緒池 Python的執行緒池
usr bin env python coding utf 8 concurrent 用於執行緒池和程序池程式設計而且更加容易,在python3.2中才有。import sys from concurrent.futures import threadpoolexecutor,as complete...
python 中線程池的使用
python中已經有了threading模組,為什麼還需要執行緒池呢,執行緒池又是什麼東西呢?在介紹執行緒同步的訊號量機制的時候,舉得例子是爬蟲的例子,需要控制同時爬取的執行緒數,例子中建立了20個執行緒,而同時只允許3個執行緒在執行,但是20個執行緒都需要建立和銷毀,執行緒的建立是需要消耗系統資源...
python 執行緒池 futures使用
首先導包 from concurrent.futures import threadpoolexecutor 建立執行緒池 executor threadpoolexecutor 10 測試方法 def test function num1,num2 print num1,num2 return n...