xargs দিয়ে সহজ সমান্তরাল প্রক্রিয়াকরণ
নমস্কার, আমি মুনো।
অনেকদিন পর পোস্ট করার জন্য দুঃখিত, তবে আমি বেঁচে আছি।
আমি একটি ব্যবহৃত Ryzen 5 কিনেছিলাম এবং অপ্রত্যাশিতভাবে কিছু পিন ভেঙে গিয়েছিল, এবং এটি শুধুমাত্র একটি RAM স্টিক চিনতে পারছিল, যার ফলে কিছু ঘটনা ঘটেছিল, তবে আমি কোনোমতে জীবনযাপন করছি।
আমি সস্তায় আরেকটি M-ATX AM4 মাদারবোর্ড পেয়েছি, তাই আমি সেই Ryzen চিপটি একটি মিনি পিসি তৈরি করতে ব্যবহার করার কথা ভাবছি।
সুবিধাজনক xargs
xargs - উইকিপিডিয়া
UNIX কমান্ড হিসেবে বিদ্যমান xargs খুবই সুবিধাজনক।
প্রথমদিকে আমি এটিতে অভ্যস্ত ছিলাম না, কিন্তু যত বেশি ব্যবহার করি, তত বেশি এর বহুমুখিতা খুঁজে পাই। এটি একটি খুব ভালো কমান্ড, এবং একটি ওয়ান-লাইনারে সাধারণ লুপ স্টেটমেন্ট লেখার ঝামেলাও প্রয়োজন হয় না।
ব্যবহারের ক্ষেত্র
উদাহরণস্বরূপ, ধরুন আপনার কাছে yt-dlp দিয়ে ভিডিও সংরক্ষণ করার মতো কিছু আছে এবং সেগুলি প্রতি লাইনে বিদ্যমান।
url1
url2
url3
স্বাভাবিকভাবেই, যদি আপনি এটিকে একবারে সমান্তরাল প্রক্রিয়াকরণের জন্য দেন, তাহলে CPU লোড তীব্র হবে, তাই যদি আপনি এটি প্রতিবারে 2টি প্রক্রিয়া দিয়ে চালাতে চান, তাহলে আপনি এটি নিম্নরূপ লিখতে পারেন:
cat url-txt | xargs -I {} -P 2 yt-dlp {}
আশ্চর্যজনকভাবে, শুধুমাত্র এটি দিয়েই আপনি প্রতিবারে 2টি প্রক্রিয়া পরিচালনা করতে পারবেন।
আসুন এটি ভেঙে দেখি
এখন, এটি কিভাবে কাজ করে?
উপরেরটি নিম্নলিখিতের সমার্থক:
yt-dlp url1 ; yt-dlp url2
yt-dlp url3
পদ্ধতিগতভাবে, এর অর্থ হল xargs-এ পাস করা কমান্ডটি প্রতিটি এক্সিকিউশনে চালানো হয়।
এটি কি read line করে একটি অ্যারে হিসাবে সংরক্ষণ করার মতো একটি ধারণা?
যদি কোনো অপশন না থাকে?
যদি কোনো অপশন না থাকে, তাহলে এটি xargs-এ দেওয়া কমান্ডে একবারে পাস করে।
যেহেতু সংশ্লিষ্ট কমান্ডগুলি সীমিত, তাই আমার মনে হয় -I অপশন ব্যবহার করা ভালো।
নিম্নলিখিত ক্ষেত্রে:
cat url-txt | xargs yt-dlp
এই ক্ষেত্রে, নিম্নলিখিত কমান্ডটি কার্যকর করা হবে:
yt-dlp url1 url2 url3
সুতরাং, যতটা সম্ভব -I দিয়ে প্রক্রিয়া করা ভালো বলে মনে হয়, তবে প্রয়োজনে অপশন ছাড়াই ঠিক থাকতে পারে।
ব্যবহারের ক্ষেত্র 2
যখন আপনি find কমান্ড দিয়ে শুধুমাত্র নির্দিষ্ট ফাইলের নাম grep করতে বা sed করতে চান, তখনও এটি সুবিধাজনক।
find . -name "testfile" | xargs -I {} grep "return 0" {}
এভাবে, এত সংক্ষিপ্ত বর্ণনার মাধ্যমে শুধুমাত্র নির্দিষ্ট ফাইল grep করা সম্ভব।
আজকের জন্য এই পর্যন্তই।
আবার দেখা হবে।