我有一个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中是否有任何并行执行方法可以用来最小化处理时间?
答案 0 :(得分:2)
$ 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代码本身来解析输入文件并启动多个线程/进程来执行任务