Bash / Shell:减少时间消耗

时间:2016-04-14 05:24:51

标签: python json bash shell

我有一个python脚本domaincheck.py和一个json文件domain.json,我可以查找任何domainname,并查询所查询的域name。< / p>

#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中是否有任何并行执行方法可以用来最小化处理时间?

3 个答案:

答案 0 :(得分:2)

使用GNU parallel

$ parallel -a set_3.txt -j+0 -k "python domaincheck.py {}"

-j个核心数,j + 0表示num。并行作业等于num。核心

-k保持输出顺序与输入顺序相同

GNU Parallel可以并行使用多核。但python进程每次都会运行。

流程创建开销效率低下。

无论如何,它比单个进程更快,因为操作系统使用所有核心,而且最简单。

还有另一种关于并行化的简单方法,http://www.parallelpython.com/

答案 1 :(得分:1)

您希望显示输出还是重定向到输出?

无论哪种方式,请尝试此操作(用于重定向):

for i in $(cat set_3.txt)
do
 echo "$i $(python domaincheck.py $i)" >> temp.csv &
 sleep  1
done

可能有更好的方法来做到这一点。如果你有足够的RAM和CPU,你甚至可以启动并发python进程(在你的情况下是65000)。

答案 2 :(得分:1)

汉是对的。而不是多次调用python进程创建开销,使用python代码本身来解析输入文件并启动多个线程/进程来执行任务