簡體   English   中英

Bash / Shell:減少時間消耗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM