[英]Bash/Shell : Reducing Time Consumption
我有一個python腳本domaincheck.py
和一個json文件domain.json
,我可以查找任何domainname
,這給了我所查詢域的name
。
#Usage 1 : python domaincheck.py cnn.com
#Usage 2 : python domaincheck.py bbc.com
#Result 1 : CNN
#Result 2: BBC
現在,我有一個輸入文件set_3.txt
,它包含大約65000行域。 我寫了一個小的shell邏輯來進行批處理。
$for i in $(cat set_3.txt); do python domaincheck.py $i;done
我像六個小時前一樣運行了腳本,到目前為止,它只處理了大約20,000個域。
如何使用Bash / shell有效地做到這一點並減少時間消耗? bash中是否有任何並行執行方法可用於最小化處理時間?
使用GNU並行
$ parallel -a set_3.txt -j+0 -k "python domaincheck.py {}"
-j
核心數,j + 0表示數字。 等於num的並行作業。 核心
-k
保持輸出順序與輸入順序相同
GNU Parallel可以並行使用多核。 但是python進程將每次運行。
流程創建開銷沒有效率。
無論如何,它比單個進程要快,因為OS使用所有內核,而且最簡單。
還有另一種關於並行化的簡單方法, http://www.parallelpython.com/
您是否要顯示輸出或將其重定向到輸出?
無論哪種方式,請嘗試以下操作(用於重定向):
for i in $(cat set_3.txt)
do
echo "$i $(python domaincheck.py $i)" >> temp.csv &
sleep 1
done
可能會有更好的方法來執行此操作。 如果您有足夠的RAM和CPU,甚至可以啟動並發python進程(在您的情況下為65000)。
韓是對的。 與其多次調用python(這會增加進程創建開銷),不如使用python代碼本身來解析輸入文件並啟動多個線程/進程來執行任務
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.