پردازش همزمان با xargs و parallel

شاید براتون پیش اومده باشه که خواسته باشید یک عملیات یا یک برنامه رو روی چندین فایل اجرا کنید.

اولین مشکلی که ممکنه پیش بیاد این هست که اون برنامه برای ورودی فقط یک فایل رو قبول کنه مثل mv که فقط یک ورودی و یک خروجی داره

حالا فرض میکنیم برنامه مورد نظر ما لیستی از فایلها رو قبول میکنه دومین مشکل احتمالی این هست که اون برنامه فایلها رو به صورت ترتیبی پردازش کنه و نه همزمان مثل برنامه فشرده ساز tar

برای حل مشکلات بالا ما میتونیم از برنامه هایی استفاده کنیم که لیستی از ورودی ها رو میگیرن و عملبات مورد نظر ما رو به صورت همزمان روی اونها انجام میدن.

تو این پست میخوام دو تا برنامه فوق العاده خوب تو این زمینه رو معرفی کنم.

 

xargs

خوب الان برای مثال میخوایم فایلهایی با پسوند txt رو پیدا کنیم و به انتهای اونها log. اضافه کنیم

اولین مرحله اینه که با دستور find فایلهای مورد نظرمون رو پیدا کنیم

خروجی این دستور لیستی از فایلها هست حالا باید این لیست رو به صورت ارگومان برای xargs بفرستیم که  با عملگر | این کار رو انجام میدیم

به صورت پیش فرض وقتی xargs از stdin (بعنی با |) ورودی میگیره

xargs برای تشخیص دادن ارگومان ها از ورودی دو تا قانون داره

  1. هر ورودی که با یک فاصله از ورودی بعدی جدا شده باشه یک ارگومان هست
  2. هر ورودی تو هر خط جدا یک ارگومان هست

جالا ممکن هست تو اسم فایل کاراکتر فاصله باشه که این مشکل به وجود میاره، برای حل این مشکل سوییچ print0- رو به find اضافه میکنیم که معنیش اینه که خروجی با کاراکتر null از هم جدا بشن بعدش سوییچ 0- رو هم به xargs میدیم تا بهش بگیم که ارگومانها با کاراکتر null از هم جدا شدن در اینصورت اون دو قانون بالا در نظر گرفته نمیشن

سوییچ های مهم

  • a, --arg-file- خواندن ارگومان های ورودی از این فایل
  • P- تعداد پردازش های همزمان، به صورت پیش فرض ۱ هست اگه ۰ قرار بدید یعنی به اندازه ای که ممکن هست پروسه ایجاد کنه
  • n- حداکثر آرگومانهایی که برنامه هر بار از ورودی میخونه
  • t, --verbose- نمایش دستورات قبل از اجرا

اینجا گذاشتیم 1 n- یعنی هر بار فقط بک ورودی رو از find بخونه

سمت xargs برای اینکه ارگومان رو یگیریم باید از {} استفاده کنیم برای اینکه از متعیر دیگه ای استفاده کنیم باید با سوییچ I- اون رو مشخص کنیم

دقت کنید که بین I- و متعیرتون فاصله نذارید

 

Parallel

این برنامه نسبت به xargs امکانات بیشتری داره

  • امکان اجرای عملیات روی چند ماشین مختلف
  • نمایش درصد پیشرفت عملیات ها
  • قابلیت گزارش گیری از عملیات ها
  • مشخص کردن محدودیت زمانی برای هر عملیات
  • مشخص کردن دفعات تلاش دوباره بر هر عملیات در صورت انجام نشدن آن
  • مدیریت بهتر عملیات ها

سوییچ های مهم

  • a, --arg-file- خواندن ارگومان های ورودی از این فایل
  • 0- مشخص کردن اینکه ارگومان ها با کاراکتر null هم جدا شدن نه فاصله یا خط جدید
  • j, -P- تعداد پردازش های همزمان، مقدار پیش فرض به اندازه هسته های پردازشگر هست اگه ۰ بزارید بعنی هر اندازه ممکن بود
  • n- حداکثر آرگومانهایی که برنامه هر بار از ورودی میخونه
  • t, --verbose- نمایش دستورات قبل از اجرا
  • joblog-- ذخیره گزارش اجرا در فایل
  • timeout-- محدودیت زمانی برای هر عملیات
  • progress-- نمایش درصد کل کار
  • eta-- نماش زمان باقیمانده
  • bar-- نماش درصد پیشرفت
  • dry-run-- دستوراتی که قرار هست اجرا شود چاپ بشه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *