#!/bin/bash
# set -x # debug version
N=${1:-123}
n=${2:-45}
workers=${workers:-${3:-10}}
((workers < 1)) && ((workers = 1))
((workers > 20)) && ((workers = 20))
((min=100000000000000)) #set min to some garbage value
work() {
for i in ${*}; do
for (( j=1; j<=${n}; j++ )); do
val=$(/path/to/a.out)
val2=$(echo ${val} | bc)
(( val2 < min )) && (( min = val2 ));
done
echo ${min}
# # debug version
# echo ${i} ${j} ${min}
done
}
# --
arr=($(
seq ${N} | xargs -n$[N/workers + 1] | while read i; do
work ${i} &
done
wait
))
echo ${arr[*]}
# --
# # debug version
# seq ${N} | xargs -t -n$[N/workers + 1] | while read i; do
# work ${i} &
# done
# wait
একটি প্যারামিটারাইজড সংখ্যক প্রক্রিয়া তৈরি করার সময় সর্বদা শ্রমিক ব্যবহার করুন এবং সর্বাধিক সংখ্যক কর্মী সীমাবদ্ধ করুন যা স্পোন করতে পারে ।
xargs -n | while read
ব্যাচগুলির তালিকাগুলির পুনরাবৃত্তি করার একটি সহজ উপায়।
seq
1 থেকে N পর্যন্ত সংখ্যার একটি তালিকা তৈরি করে
xargs -n
সেই তালিকাটি এন / কর্মীদের + 1 ব্যাচে ভাগ করে।
- উদাহরণস্বরূপ এন = 100 কর্মী = 10 1 থেকে 100 পর্যন্ত 11 সংখ্যার 10 লাইন তৈরি করবে।
while read i
সংখ্যা প্রতিটি লাইন পড়েন।
work ${i} &
শুধু সংখ্যা ব্যাচ work
সহ ফাংশন কল ${i}
।
ডিবাগ করতে আমি মন্তব্য-আউট ডিবাগ কোড যুক্ত করেছি। কেবলমাত্র তার ডিবাগ সংস্করণটির সাথে echo
ডিবাগ সংস্করণ এবং কোডটির সাথে প্রতিস্থাপন করুন # --
এবং আপনি দেখতে পাচ্ছেন যে এটি কীভাবে ব্যাচগুলিতে কাজ করে। Uncomment set -x
আরো বিস্তারিত ডিবাগ আউটপুট যা আপনি একটি ফাইলে পুনর্নির্দেশ করতে চান তাদের জন্য।
এটি কীভাবে পরিচালিত হয় তা দেখার জন্য বিভিন্ন পরামিতি সহ কেবল ডিবাগ সংস্করণটি চালান:
parallel.sh 223 5 1
parallel.sh 223 5 5
parallel.sh 223 5 10
parallel.sh 223 5 20
দাবি অস্বীকার: এই কোডটি min
কর্মী প্রক্রিয়াগুলির মধ্যে মানটি সিঙ্ক্রোনাইজ করে না । সর্বনিম্ন মান অর্জন করা কোনও ভয়াবহ অনুশীলন নয়। এটি সম্ভবত:
parallel.sh 223 5 20 | tr ' ' '\n' | sort -n | head -1
অথবা কেবল স্ক্রিপ্টে এটি যুক্ত করুন:
echo ${arr[*]} | tr ' ' '\n' | sort -n | head -1