Python3
200 subscribers
99 photos
6 videos
26 files
517 links
🎓 آموزش و پروژه‌های Python
آموزش‌های کاربردی و پروژه‌های عملی Python برای همه سطوح. 🚀
Download Telegram
آموزش کد چند فرآیندی (Multiprocessing) در پایتون 🐍

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

مفهوم اولیه
در پایتون، کتابخانه‌ی multiprocessing ابزارهای لازم برای اجرای چند فرآیندی را فراهم می‌کند. این کتابخانه به شما امکان می‌دهد تا از فرآیندهای جداگانه برای اجرای وظایف مختلف استفاده کنید.

مثال کد

import multiprocessing
import time

def worker(num):
"""فرآیند نمونه ای که فقط یک عدد را چاپ می‌کند."""
print(f'Worker: {num}')
time.sleep(2)

if __name__ == '__main__':
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
processes.append(p)
p.start()

for p in processes:
p.join()

توضیحات:

1. ایمپورت کتابخانه‌ی multiprocessing:

   import multiprocessing
import time

2. تعریف تابع worker:
این تابع ساده، یک عدد را به عنوان ورودی می‌گیرد و آن را چاپ می‌کند و سپس به مدت ۲ ثانیه توقف می‌کند.

   def worker(num):
print(f'Worker: {num}')
time.sleep(2)

3. ایجاد و شروع فرآیندها:
در بلوک if __name__ == '__main__':، ما پنج فرآیند ایجاد کرده و آنها را با استفاده از start() آغاز میname
   if __name__ == '__main__':
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
processes.append(p)
p.start()

4. منتظر ماندن برای اتمام فرآیندها:
با استفاده از join()، ما مطمئن می‌شویم که تمامی فرآیندها قبل از پایان یافتن برنامه اصلی به اتمام رسیده‌اند.

   for p in processes:
p.join()

نکات مهم
1. به اشتراک‌گذاری داده‌ها:
کتابخانه‌ی multiprocessing ابزارهایی مانند Queue, Pipe, Manager برای به اشتراک‌گذاری داده‌ها بین فرآیندها فراهم می‌کند.

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

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

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

این تکنیک می‌تواند به شما کمک کند تا برنامه‌های پیچیده و زمان‌بر خود را بهینه کنید و عملکرد بهتری را تجربه کنید. 🎉

🔻برای بیشتر یاد گرفتن بیا اینجا

#Python #Multiprocessing #Programming #ParallelComputing
👍2
استفاده از پردازش چند هسته‌ای CPU در پایتون

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

مثال ساده: پردازش همزمان وظایف ساده

برای شروع، یک برنامه ساده با استفاده از کتابخانه‌ی multiprocessing ایجاد می‌کنیم که چندین وظیفه را همزمان اجرا کند.

کد:

import multiprocessing
import time

def worker(num):
"""یک وظیفه ساده که عدد ورودی را چاپ می‌کند و برای ۲ ثانیه متوقف می‌شود."""
print(f'Worker: {num}')
time.sleep(2)

if __name__ == '__main__':
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
processes.append(p)
p.start()

for p in processes:
p.join()

توضیحات:
1. ایمپورت کتابخانه‌ی multiprocessing و time:
این کتابخانه‌ها برای ایجاد و مدیریت فرآیندها و توقف زمان استفاده می‌شوند.

2. تعریف تابع worker:
این تابع یک عدد را به عنوان ورودی می‌گیرد و آن را چاپ می‌کند، سپس برای ۲ ثانیه متوقف می‌شایجاد و شروع فرآیندهاآیندها:
با استفاده از multiprocessing.Process، پنج فرآیند ایجاد می‌کنیم و آنها را با استفاده از start() آغاز می‌کنمنتظر ماندن برای اتمام فرآیندهاآیندها**:
با استفاده از join()، مطمئن می‌شویم که تمامی فرآیندها قبل از پایان یافتن برنامه اصلی به اتمام رسیده‌اند.

مثال پیشرفته: استفاده از Pool برای مدیریت وظایف

برای مدیریت بهتر تعداد زیادی از وظایف، می‌توان از کلاس Pool استفاده کرد. این روش به شما امکان می‌دهد که تعداد ثابتی از فرآیندها را ایجاد کرده و وظایف را بیکد:ید.

کد:

import multiprocessing
import time

def worker(num):
"""یک وظیفه ساده که عدد ورودی را چاپ می‌کند و برای ۲ ثانیه متوقف می‌شود."""
print(f'Worker: {num}')
time.sleep(2)

if __name__ == '__main__':
with multiprocessing.Pool(processes=4) as pool:
pool.map(worker, range(10))

توضیحات:
1. ایمپورت کتابخانه‌ی multiprocessing و time:
این کتابخانه‌ها برای ایجاد و مدیریت فرآیندها و توقف زمان اتعریف تابع worker*تعریف تابع worker**:
این تابع یک عدد را به عنوان ورودی می‌گیرد و آن را چاپ می‌کند، سپس برااستفاده از Pool **استفاده از Pool**:
با استفاده از multiprocessing.Pool، یک استخر از ۴ فرآیند ایجاد می‌کنیم و از متد map برای اجرای تابع worker برای هر عدد از ۰ تا ۹ استفاده می‌کنیم.

مثال پیشرفته‌تر: استفاده از concurrent.futures برای مدیریت وظایف

کتابخانه‌ی concurrent.futures یکی دیگر از ابزارهای پایتون برای مدیریت پردازش‌های همزمان است. این کتابخانه برای ساده‌تر کردن استفاده کد: طراحی شده است.

کد:

from concurrent.futures import ProcessPoolExecutor
import time

def worker(num):
"""یک وظیفه ساده که عدد ورودی را چاپ می‌کند و برای ۲ ثانیه متوقف می‌شود."""
print(f'Worker: {num}')
time.sleep(2)

if __name__ == '__main__':
with ProcessPoolExecutor(max_workers=4) as executor:
executor.map(worker, range(10))

توضیحات:
1. ایمپورت کتابخانه‌ی concurrent.futures و time:
این کتابخانه‌ها برای ایجاد و مدیریت فرتعریف تابع worker‌شوند.

2. تعریف تابع worker:
این تابع یک عدد را به عنوان ورودی می‌گیرد و آن را چاپ می‌کند، سپساستفاده از ProcessPoolExecutorاستفاده از ProcessPoolExecutor**:
با استفاده از ProcessPoolExecutor، یک استخر از ۴ فرآیند ایجاد می‌کنیم و از متد map برای اجرای تابع worker برای هر عدد از ۰ تا ۹ استفاده می‌کنیم.

استفاده از پردازش چند هسته‌ای در پایتون می‌تواند به بهبود کارایی برنامه‌ها کمک کند. با استفاده از کتابخانه‌هایی مانند multiprocessing و concurrent.futures، می‌توان وظایف مختلف را به طور همزمان اجرا کرد و از توان پردازشی سیستم به بهترین نحو استفاده کرد.

🔻برای بیشتر یاد گرفتن بیا اینجا

#Python #Multiprocessing #ConcurrentProgramming #ParallelComputing #ProgrammingTips
👍2
🎯 روش پخش کردن بار پردازشی کد روی تمام هسته‌های CPU برای افزایش سرعت اجرا 🚀

امروزه که پردازنده‌ها چند‌هسته‌ای شده‌اند، یکی از بهترین راه‌های بهینه‌سازی کد و افزایش سرعت اجرای برنامه‌ها، استفاده از تمام هسته‌های CPU است. 🖥️ اگر کد شما فقط روی یک هسته اجرا شود، توانایی‌های کامل سیستم را به کار نمی‌گیرد و سرعت اجرای برنامه کمتر از حد انتظار خواهد بود.

🔍 مقدمه
پردازنده‌های مدرن (CPU) معمولاً دارای چندین هسته هستند که به شما این امکان را می‌دهند تا چندین کار را به طور همزمان اجرا کنید. استفاده از این توانایی‌ها برای تقسیم بار پردازشی به "چند وظیفه‌ای" یا "چند نخی" معروف است. در پایتون، به دلیل محدودیت‌های GIL (Global Interpreter Lock) ممکن است نتوان به راحتی از تمام هسته‌ها استفاده کرد. اما با استفاده از کتابخانه‌های خاص مثل multiprocessing می‌توانید این محدودیت را دور بزنید و بار پردازشی را به خوبی بین هسته‌های مختلف پخش کنید. ⚙️

🚧 موضوع: پخش بار پردازشی با multiprocessing در پایتون
کتابخانه‌ی multiprocessing به شما این امکان را می‌دهد که فرآیندهای مختلفی را به‌طور همزمان اجرا کنید و از همه‌ی هسته‌های CPU بهره ببرید. هر فرآیند مستقل از دیگری عمل می‌کند، بنابراین مشکلات GIL دیگر وجود نخواهد داشت.

💻 مثال کد:

import multiprocessing

def task(n):
print(f"Running task {n}...")

if __name__ == "__main__":
processes = []
for i in range(multiprocessing.cpu_count()): # تعداد هسته‌های CPU
p = multiprocessing.Process(target=task, args=(i,))
processes.append(p)
p.start()

for p in processes:
p.join()

🔍 توضیح کد:
1. ما از کتابخانه‌ی multiprocessing استفاده می‌کنیم که امکان ایجاد فرآیندهای جداگانه برای اجرای کد را فراهم می‌کند. 🧠
2. تابع task یک وظیفه‌ی ساده است که برای هر فرآیند اجرا می‌شود.
3. در قسمت اصلی برنامه، با استفاده از multiprocessing.cpu_count() تعداد هسته‌های CPU را شناسایی کرده و به ازای هر هسته یک فرآیند ایجاد می‌کنیم. 🔄
4. در نهایت، فرآیندها را با start() اجرا می‌کنیم و با join() مطمئن می‌شویم که همه فرآیندها به اتمام برسند.

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

(اینجا عضو شو تا بیشتر بدونی)

#بهینه_سازی #برنامه_نویسی #چند_نخی #پایتون #CPU #Multiprocessing #افزایش_سرعت #پردازش
👍1