How to bash multithread?
tr ',' ':' <test1.txt | xargs -P 4 -I XX ruby test.rb "http://XX/"
Assuming that the test1.txt
file contains lines like
127.0.0.1,80
127.0.0.1,8080
then the tr
would change this to
127.0.0.1:80
127.0.0.1:8080
and the xargs
would take a line at a time and replace XX
in the given command string with the contents of the line and run the command. With -P 4
we get at most four simultaneous processes running.
If your file has trailing commas on each line, remove them first:
sed 's/,$//' test1.txt | tr ',' ':' | xargs ...as above...
or even
sed -e 's/,$//' -e 'y/,/:/' test1.txt | xargs ...as above...
I would do it this way:
parallel --colsep , ruby test.rb {3}://{1}:{2}/ :::: ipport.txt ::: http https
It will default to run one job per cpu core. This can be adjusted with -j20
for 20 jobs in parallel.
Contrary to the xargs
-solution you can post process the output: The output is serialized, so you will never see output from two jobs mix.
GNU Parallel is a general parallelizer and makes is easy to run jobs in parallel on the same machine or on multiple machines you have ssh access to.
If you have 32 different jobs you want to run on 4 CPUs, a straight forward way to parallelize is to run 8 jobs on each CPU:
GNU Parallel instead spawns a new process when one finishes - keeping the CPUs active and thus saving time:
Installation
For security reasons it is recommended you use your package manager to install. But if you cannot do that then you can use this 10 seconds installation.
The 10 seconds installation will try to do a full installation; if that fails, a personal installation; if that fails, a minimal installation.
$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 67bd7bc7dc20aff99eb8f1266574dadb
12345678 67bd7bc7 dc20aff9 9eb8f126 6574dadb
$ md5sum install.sh | grep b7a15cdbb07fb6e11b0338577bc1780f
b7a15cdb b07fb6e1 1b033857 7bc1780f
$ sha512sum install.sh | grep 186000b62b66969d7506ca4f885e0c80e02a22444
6f25960b d4b90cf6 ba5b76de c1acdf39 f3d24249 72930394 a4164351 93a7668d
21ff9839 6f920be5 186000b6 2b66969d 7506ca4f 885e0c80 e02a2244 40e8a43f
$ bash install.sh
For other installation options see http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Learn more
Download the cheat sheet: http://www.gnu.org/s/parallel/parallel_cheat.pdf
See more examples: http://www.gnu.org/software/parallel/man.html
Watch the intro videos: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Walk through the tutorial: http://www.gnu.org/software/parallel/parallel_tutorial.html
Sign up for the email list to get support: https://lists.gnu.org/mailman/listinfo/parallel