قراره تو این دوره چی یاد بگیرم؟

  • مقدمه و علت و انگیزه موازی سازی و همروندی در پایتون
  • چرا پایتون کند است؟
  • موازی سازی و همروندی در پایتون
  • تفاوت های multiprocessing و threading و asyncioارائه شمای کلی

زبان برنامه نویسی پایتون در حال حاضر بر اساس ایندکس Tiobe در رتبه اول محبوب ترین زبان های برنامه نویسی قرارد دارد و در زمینه های مختلف نظیر توسعه وب ، امنیت ، هوش مصنوعی ، داده کاوی ، یادگیری ماشین ، DevOps ، توسعه نرم افزار های دسکتاپ و … (تقریبا در تمامی حوزه ها) از محبوب ترین و قدرتمند ترین زبان های برنامه نویسی است و دلیل این محبوبیت هم وجود کتابخانه ها ، فریمورک ها و ابزار های قدرتمندی است که هر روزه در حال توسعه توسط برنامه نویسان و دانشمندان حوزه علوم داده و غیره است.

اما همیشه بر سرعت ، کارایی و زمان اجرای برنامه ها در پایتون نقد های زیادی وارد بوده و هست

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

 

چرا پایتون کند است؟

برای اندازه گیری میزان سرعت زبان های برنامه نویسی Benchmark های مختلفی وجود دارد که از معتبر ترین این ها پروژه benchmarks game team است. که در شکل های زیر سرعت زبان های برنامه نویسی پایتون و C (بطور مثال) در مقایسه با هم بررسی شده اند و همانطور که مشاهده میکنید به شدت پایتون سرعت اجرای پایین تری نسبت به C دارد.

 

مقایسه سرعت اجرای برنامه ها در پایتون در مقابل زبان های دیگر

دلایل کندی پایتون ؟

پایتون به دلیل ۳ دلیل زیر این چالش سرعت و کند بودن را دارد:

  • GIL یا Global Interpreter Lock
  • مفسری بودن زبان پایتون
  • پویا و داینامیک بودن (برای حل این روش و تعریف نوع استاتیک Cython توسعه داده شد)
  • دلیل این ویژگی های پایتون و روش های بهبود و تغییرشان ، در این دوره توضیح خواهد داده شد.

 

بهبود سرعت برنامه ها در پایتون با تکنیک های برنامه نویسی موازی و همروند

ایده موازی سازی اینجاست که یک کار بزرگ را به چندین کار کوچکتر و تسک تقسیم کنیم و این تسک ها را بصورت کاملا موازی با یکدیگر اجرا کنیم در مقابل در برنامه نویسی همروند تسک ها میتوانند روی حتی یک CPU  ویا چند CPU بصورت هم پوشانی و همروند اجرا شوند همانطوری که در تصویر زیر مشاهده میکنید

 

موازی سازی و همروندی در پایتون

به  دلیل وجود GIL در پایتون برنامه نویسی موازی چالش هایی دارد و عملا پایتون Single Thread است ولی ابزار ها و کتابخانه هایی برای برنامه نویسی موازی و همروند درپایتون وجود دارد که ابزار های قدرمتند و پرکاربردی برای برنامه نویسان پایتون محسوب میشوند. هدف ما در این دوره آموزشی معرفی این سه کتابخانه مهم پایتون است که برای برنامه نویسان از سطح متوسط به بالاتر آشنایی با این مفاهیم به شدت واجب است.

 

  • Threading: برای برنامه نویسی چند نخی (البته نه چند نخی موازی) بصورت همروند و مناسب برای پردازش های Fast I/O Bound
  • AsyncIO: مناسب برنامه نویسی هم روند و ناهمگام روی یک نخ و مناسب برای پردازش های Slow I/O Bound
  • Multiprocessing: مناسب برای برنامه نویسی موازی و پردازش های CPU Bound

نکته : مفهوم همروندی در هر 3 کتابخانه وجود دارد و در کتابخانه multiprocessing بصورت واقعی پردازش موازی داریم.

چرا این دوره برای توسعه دهندگان پایتون واجب است ؟

هدف اصلی این دوره ، آموزش برنامه نویسی موازی و همروند با پایتون در سطح نخ ها و فرآیند ها و بیان چالش های این شیوه برنامه نویسی در مقابل برنامه نویسی معمول و کلاسیک و کند و روش های حل این چالش ها است. همانطور که بیان شد پایتون از محبوب ترین و پرکاربرد ترین زبانهای برنامه نویسی است و به ویژه امروزه به شدت محبوب در بحث های علوم داده و یادگیری ماشین است و یکی از کاربرد های بحث موازی سازی و همروندی دقیقا در همین پردازش های علوم داده و غیره است که اکثرا محاسبات سنگین CPU را نیاز دارند و به اصطلاح CPU bound هستند ولی متاسفانه پایتون در حالت برنامه نویسی معمولی که همه انجام میدهند بسیار کند است و دقیقا هدف کتابخانه multiprocessing در پایتون موازی سازی برای فرآیند های CPU bound بوده است ، بطور مثال در نمودار زیر یک اسکریپت پایتونی را در دو حالت برنامه نویسی معمول پایتون (Single Core) و حالت موازی سازی شده (با ماژول multiprocessing) مشاهده میکنید (لینک مشاهده اسکریپت) که در حالت اجرای موازی به شدت speed up و زمان اجرای برنامه بهبود یافته است و حدودا 30 برابر سریعتر شده است .

برنامه نویسی موازی و همروند با پایتون

در کنار این بحث امروزه پایتون برای برنامه نویسی بک اند و توسعه وبسایت ها نیز بسیار محبوب است و در این پروژه ها فرآیند های I/O Bound زیادی مشاهده میکنیم فرآیندهایی که در انتظار یک عملیات ورودی خروجی هستند نظیر موارد زیر

  • I/O های انتظار و درخواست و اتصال به شبکه
  • اتصال به یک دیتابیس یا فایل
  • اتصال به یک وب سرور
  • دریافت اطلاعات از یک وب سرور

و چنین مواردی که در آن وقت پردازنده در بیشتر مواقع صرف ورودی خروجی میشود و محاسبات آنچنان سنگین نیست ولی پردازنده منتظر است و کتابخانه threading و  asyncioنیز باعث اجرای همروند پردازش های I/O bound میشوند و زمان اجرای برنامه را بسیار بهبود میدهد و سبب جلوگیری از idle ماندن CPU خواهد شد و به همین دلیل بسیار مورد استفاده برنامه نویسان قرار میگریند.

این دوره مناسب چه برنامه نویسانی است؟

این دوره مناسب برنامه نویسان پایتونی است که با زبان برنامه نویسی پایتون به خوبی آشنا شده اند و قصد دارند در برنامه نویسی پایتون دانش خود را افزایش دهند و چندین پله level up شوند و برنامه هایی با بالاترین سرعت و کارایی بنویسند. برنامه نویسانی که در زمینه های هوش مصنوعی و علم داده کار میکنند ، برنامه نویسان بک اند و تمامی پایتون کارها مخاطبین این دوره هستند.

پیش نیاز های این دوره آموزشی؟

  • دوره جامع برنامه نویسی پایتون با تمرکز بر هوش مصنوعی و یادگیری ماشین

ابزار ها و کتابخانه هایی که در این آموزش استفاده خواهد شد:

  • آخرین نسخه از پایتون ۳
  • کتابخانه ها و ماژول های پایتونی کلیدی در این آموزش
    • multiprocessing
    • asyncio
    • threading
  • آخرین نسخه از VS Code

داکیومنتیشن رسمی سایت پایتون برای کتابخانه های multiprocessing و threading و asyncio

سرفصل های آموزش برنامه نویسی موازی و همروند با پایتون

  • مقدمه و علت و انگیزه موازی سازی و همروندی در پایتون
  • چرا پایتون کند است؟
    • GIL یا Global Interpreter Lock
      • دلیل وجود GIL در پایتون چه بوده است؟
      • پروژه 1
      • پروژه 2
      • پروژه 3
      • پروژه 4
    • مفسری بودن زبان پایتون
      • پایتون چگونه کد شما را تفسیر میکند ؟
    • پویا و داینامیک بودن زبان پایتون
  • برنامه نویسی موازی و هم روند
  • موازی سازی و همروندی در پایتون
    • CPU Bound در مقابل I/O Bound
    • تفاوت های multiprocessing و threading و asyncioارائه شمای کلی
    • Threading
    • Asyncio
    • Multiprocessing
    • سخت افزار کامپیوتر شما و بررسی تعداد هسته ها و ترد ها
    • فرآیند چیست؟
    • نخ چیست؟