লুপ চলাকালীন আমি এর জন্য কীভাবে জিএনইউ সমান্তরাল ব্যবহার করব?


12

সুতরাং আমি একটি সময় লুপ আছে:

cat live_hosts | while read host; do \
    sortstuff.sh -a "$host" > sortedstuff-"$host"; done

তবে এটি দীর্ঘ সময় নিতে পারে। লুপ চলাকালীন আমি এর জন্য কীভাবে জিএনইউ সমান্তরাল ব্যবহার করব?

উত্তর:


13

আপনি কিছুক্ষণ লুপ ব্যবহার করবেন না।

parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts

মনে রাখবেন যে আপনার live_hosts(উদাহরণস্বরূপ /some/dir/file) রাস্তাগুলি প্রসারিত হওয়ার সাথে সাথে sortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/file(ফলস্বরূপ no such file or directory) থাকলে এটি কাজ করবে না ; এই ক্ষেত্রে ব্যবহার {//}এবং {/}( বিশদ জন্য gnu-parallelম্যানুয়াল দেখুন):

parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts

আউটপুটটি ভিতরে রাখার teeসাথে ব্যবহার করা কি সম্ভব ? সুতরাং আমি আউটপুট এটি দেখতে হিসাবে দেখতে পারেন। parallelsortedstuff
সর্বহারা

1
@ প্রলেটারিয়েট - আপনিও টার্মিনালে আউটপুট দিতে চান? শুধু প্রতিস্থাপন >সঙ্গে | teeযেমন প্রথম কমান্ড হয়ে parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
don_crissti

3

একটি পুরাতন স্কুল হিসাবে "একটি কাজ করুন এবং এটি ভালভাবে করুন" ইউনিক্স ছেলে, আমি স্ট্রিং প্রতিস্থাপনের জিনিসগুলি একটি মোড়কের স্ক্রিপ্টে রাখতাম:

#!/bin/sh
sortstuff.sh -a "$1" > sortedstuff-"$1"

আপনি যদি এটি কল করেন wrapper.sh, কল করার parallelআদেশটি হ'ল:

parallel wrapper.sh < live_hosts

মনে রাখবেন যে আপনার catএই ধরণের জিনিসটির প্রয়োজন নেই, যা একটি বাহ্যিক প্রোগ্রামের অনুরোধ সংরক্ষণ করে।


2

আপনার দরকার নেই parallel , যেহেতু লুপের বডিটি পূর্ববর্তী পুনরাবৃত্তির উপর নির্ভর করে না। প্রতিটি হোস্টের জন্য কেবল একটি নতুন পটভূমি প্রক্রিয়া শুরু করুন।

while read host; do
    sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait    # Optional, to block until the background tasks are done

parallelকিছু বিষয় পরিচালনা করা সহজ করে তোলে যদিও; আপনি আরও সহজে সমান্তরালে চলমান কাজের সংখ্যা সীমাবদ্ধ করতে পারেন।


3
যদি wc -l live_hostsডিস্ক স্পিন্ডল বা সিপিইউ কোরের সংখ্যার চেয়ে বেশি হয় - টাস্কটি আই / ও বা সিপিইউযুক্ত কিনা তার উপর নির্ভর করে - আপনি এর মতো সমাধানের সাথে সমান্তরালতা থেকে যে পরিমাণ সুবিধা পাবেন তা আপনি খেয়ে যাচ্ছেন। parallelকাজের সংখ্যা সীমাবদ্ধ করার ক্ষমতা কেবল দুর্দান্ত নয়, এটি নিকট-অপরিহার্য, যদি প্রক্রিয়াজাতকরণের গতি আপনার লক্ষ্য হয়।
ওয়ারেন ইয়ং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.