Python3
200 subscribers
100 photos
6 videos
26 files
518 links
🎓 آموزش و پروژه‌های Python
آموزش‌های کاربردی و پروژه‌های عملی Python برای همه سطوح. 🚀
Download Telegram
استفاده از پردازش چند هسته‌ای 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