چگونه پیشرفت وظایف موازی را در پایتون با TQDM پی‌گیری کنیم

شکل ۱: عکس از مارک-اولیویر جودوئین در روزنامه «اونشپ»
شکل ۱: عکس از مارک-اولیویر جودوئین در روزنامه «اونشپ»
منتشر‌شده در towardsdatascience به تاریخ ۶ سپتامبر ۲۰۲۱
لینک منبع How to Track the Progress of Parallel Tasks In Python with TQDM

پایتون یک زبان برنامه‌نویسی عالی است. این مانند یک آچار فرانسه است که در زمینه‌های متعددی استفاده می‌شود: تجزیه و تحلیل و تجسم داده‌ها، آموزش مدل‌های یادگیری ماشینی، ساخت API ها، اسکرپینگ وب سایت‌ها، DevOps، MLOps، و به وضوح، چیزهای بسیار بیشتری.

تطبیق پذیری این زبان، در میان چیزهای دیگر، با هزینه همراه است: پایتون در مقایسه با زبان‌های دیگر کند است.

پس باید به یک زبان دیگر روی بیاوریم؟

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

در این مقاله، ما به چند پردازشی به عنوان یکی از آن‌ها نگاه خواهیم کرد. ما خواهیم دید که چگونه از آن در مورد کاربری استفاده کنیم و چگونه پیشرفت وظایف موازی را با استفاده از یک نسخه کمی اصلاح‌شده TQDM ردیابی کنیم.

می‌دانید، TQDM، آن نمودار پیشرفت عالی که احتمالا قبلا از آن برای پی‌گیری پیشرفت for-loopهای خود برای مثال استفاده کرده‌اید.

امروز، خواهیم دید که چگونه می توان از آن برای ردیابی کارهای موازی استفاده کرد.

شکل ۲:
شکل ۲:

خب، بیایید یک نگاهی بیندازیم. ∅

چند پردازشی چیست؟

چند پردازشی به شما این امکان را می‌دهد که برنامه‌هایی ایجاد کنید که به صورت همزمان اجرا شوند و از چند هسته ایستگاه کاری شما استفاده کنند.

وقتی فرایندها راه‌اندازی می‌شوند، هر کدام حافظه خاص خود را دارند. این امر به اشتراک گذاری اشیا متعدد در هنگام استفاده از چند پردازشی را دشوار می‌سازد.

شکل ۳: تصویر نویسنده
شکل ۳: تصویر نویسنده

چند پردازشی زمانی بسیار مفید است که شما عملیات‌های متمرکز بر CPU مانند پردازش داده‌ها (tokenization، افزایش تصویر، فیلترینگ و غیره) را داشته باشید.

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

یک نوار پیشرفت برای کارهای موازی:P_tqdm

همانطور که احتمالا حدس زده‌اید، «p» به معنای موازی است.

در اصل p_tqdm یک پوشش در اطراف pathos است. چند پردازش و tqdm. بر خلاف کتابخانه پیش‌فرض چند پردازش پایتون، pathos یک نقشه موازی انعطاف‌پذیرتر ارائه می‌دهد که تقریباً می‌تواند هر نوع عملکردی-از جمله توابع لامبدا‌، توابع تو در تو و روش‌های کلاس-را اعمال کند و به راحتی می‌تواند توابع را با چندین آرگومان اداره کند. tqdm در بالای نقشه موازی pathos اعمال می‌شود و یک نوار پیشرفت شامل زمان تخمین زده شده برای تکمیل را نمایش می‌دهد. — Github.

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

بیایید بگوییم که شما یک لیست بزرگ از اعداد برای پردازش دارید.

به خاطر سادگی، فرض می‌کنیم که این «پردازش سنگین» شامل انتظار ۵ میلی‌ثانیه و اضافه کردن یک ثابت به یک عدد است (البته شما می‌توانید هر چیزی که در اینجا پیچیده‌تر است را تصور کنید).

بیایید این تابع را به ترتیب اجرا کنیم.

طبق TQDM، این کارها 8 دقیقه 42 ثانیه (10000x0.05 ثانیه) طول می‌کشد

شکل ۴: GIF نویسنده
شکل ۴: GIF نویسنده

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

می‌بینیم که زمان مورد نیاز برای تکمیل آن‌ها حدود 42 ثانیه است که تقریباً معادل 500/12 است، 12 عدد تعداد هسته‌های لپ‌تاپ من است.

شکل ۵: GIF
شکل ۵: GIF

اگر می‌خواهید تعداد هسته‌ها را به مقدار کمتری تنظیم کنید، می‌توانید num_cpus kwarg را اضافه کنید. این کار به سادگی یک تایپ کردن است.

به جای استفاده از p_map، می‌توانید از موارد زیر نیز استفاده کنید:

  • مورد p_imap: همان کار را انجام می‌دهد اما به جای بازگشت یک لیست، یک تکرار کننده را برمی‌گرداند
  • مورد p_umap`: که لیست نامرتبی را برمی‌گرداند (پردازش به خصوص سریع‌تر نیست)
  • مورد p_uimap: یک تکرارکننده عناصر نامرتب را برمی‌گرداند

ممنون از خواندن شما ∅ ∅

متشکرم که تا آخر کار با ما همراه بودید. امیدوارم p_tqdm را برای استفاده در پروژه‌هایتان برای موازی کردن باره‌ای کاری و ردیابی آسان و بصری پیشرفت آن‌ها مفید دیده باشید.

مثالی که ما نشان دادیم بسیار ساده است، اما شما می‌توانید سناریوهای بسیاری را تصور کنید که p_tqdm در آن به کار می‌آید. به عنوان یک دانشمند داده، اسکریپت‌های من معمولاً هر زمان که داده‌ها را اسکن می‌کنم یا پردازش می‌کنم‌، زمان می‌برد. این که بتوانید این عملیات‌ها را همزمان با آن‌ها ردیابی کنید بسیار جالب است.

اگر می‌خواهید با این کتابخانه بازی کنید‌، تردید نکنید و کد آن را در Github بررسی کنید.

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