Python3
200 subscribers
100 photos
6 videos
26 files
518 links
🎓 آموزش و پروژه‌های Python
آموزش‌های کاربردی و پروژه‌های عملی Python برای همه سطوح. 🚀
Download Telegram
Forwarded from گوربه
پردازش موازی پیشرفته در پایتون: استفاده از concurrent.futures برای بهره‌وری بیشتر 🚀

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

پردازش موازی با concurrent.futures:
ایجاد و اجرای وظایف موازی:ابتدا باید ThreadPoolExecutor یا ProcessPoolExecutor را برای اجرای وظایف موازی انتخاب کنید. ThreadPoolExecutor برای وظایفی که نیاز به I/O دارند مناسب است، در حالی که ProcessPoolExecutor برای وظایف محاسباتی سنگین بهتر عمل می‌کند.


    from concurrent.futures import ThreadPoolExecutor, as_completed
import time

def task(n):
print(f"Processing {n}")
time.sleep(2)
return n * n

numbers = [1, 2, 3, 4, 5]
results = []

with ThreadPoolExecutor(max_workers=3) as executor:
futures = [executor.submit(task, num) for num in numbers]
for future in as_completed(futures):
results.append(future.result())

print("Results:", results)

2. مزایای استفاده از concurrent.futures:ساده‌سازی مدیریت وظایف:با استفاده از futures، می‌توانید به راحتی نتایج وظایف موازی را مدیریت کنیبهره‌وری بیشتر:با توزیع وظایف بین چندین هسته، می‌توانید کارایی برنامه‌های خود را افزایش دهیکد خواناتر: استفاده از ThreadPoolExecutor و ProcessPoolExecutor کد را خواناتر و قابل فهمتراستفاده پیشرفته‌تر:

برای استفاده پیشرفته‌تر از concurrent.futures، می‌توانید از ترکیب ThreadPoolExecutor و ProcessPoolExecutor استفاده کنید تا بهترین عملکرد را برای وظایف مختلف بدست آورید.

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

def io_task(n):
print(f"IO Task {n}")
time.sleep(2)
return n + n

def cpu_task(n):
print(f"CPU Task {n}")
return sum(i*i for i in range(n))

numbers = [10, 20, 30, 40, 50]

with ThreadPoolExecutor(max_workers=3) as io_executor, ProcessPoolExecutor(max_workers=3) as cpu_executor:
io_futures = [io_executor.submit(io_task, num) for num in numbers]
cpu_futures = [cpu_executor.submit(cpu_task, num) for num in numbers]

for future in as_completed(io_futures + cpu_futures):
print(f"Result: {future.result()}")

فواید:افزایش کارایی:پردازش موازی می‌تواند به طور چشمگیری کارایی برنامه‌ها را افزامدیریت آسان وظایف: استفاده از concurrent.futures مدیریت وظایف موازی را بسیار ساده‌تمعایب:- پیچیدگی دیباگ: دیباگ کردن کدهای موازی می‌تواند پیچیده‌تمصرف منابع: استفاده نادرست از پردازش موازی می‌تواند منجر به مصرف زیاد منابع شود.

برای دریافت آموزش‌های بیشتر و نکات پیشرفته در زمینه برنامه‌نویسی، حتماً به کانال تلگرام ما بپیوندید! 💻📱

#Python #Concurrency #ParallelProcessing #AdvancedPython #ProgrammingTips #CodeOptimization
👍2
مدیریت فایل‌ها با os و shutil در پایتون

مقدمه:
مدیریت فایل‌ها و دایرکتوری‌ها یکی از مهارت‌های اساسی برای هر برنامه‌نویس پایتون است. دو ماژول مهم و کاربردی که در این زمینه استفاده می‌شوند، os و shutil هستند. این ماژول‌ها ابزارهایی را فراهم می‌کنند که به راحتی بتوانید فایل‌ها و پوشه‌ها را ایجاد، حذف، جابجا و کپی کنید.

مدیریت دایرکتوری‌ها:

1. ایجاد دایرکتوری:
با استفاده از تابع mkdir از ماژول os می‌توانید دایرکتوری جدیدی ایجاد کنید.


    import os

os.mkdir('new_directory')

2. حذف دایرکتوری:
برای حذف یک دایرکتوری خالی، از تابع rmdir استفاده کنید.


    os.rmdir('new_directory')

3. ایجاد مسیرهای چندگانه:
برای ایجاد مسیرهای چندگانه، از makedirs استفاده کنید.


    os.makedirs('parent_directory/child_directory')

مدیریت فایل‌ها:

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


    with open('file.txt', 'w') as file:
file.write('Hello, World!')

2. حذف فایل:
برای حذف یک فایل، از remove استفاده کنید.


    os.remove('file.txt')

3. جابجایی و کپی فایل‌ها:
ماژول shutil ابزارهای مفیدی برای جابجایی و کپی فایل‌ها فراهم می‌کند.


    import shutil

shutil.move('source.txt', 'destination.txt')
shutil.copy('source.txt', 'destination.txt')

کاربردهای پیشرفته:

ماژول‌های os و shutil امکانات بیشتری نیز فراهم می‌کنند، از جمله تغییر نام فایل‌ها، بررسی وجود فایل یا دایرکتوری و دسترسی به جزئیات فایل‌ها.

# تغییر نام فایل
os.rename('old_name.txt', 'new_name.txt')

# بررسی وجود فایل
if os.path.exists('file.txt'):
print('File exists')

# دسترسی به جزئیات فایل
file_info = os.stat('file.txt')
print(f'Size: {file_info.st_size} bytes')

فواید و معایب:
- فواید:
- مدیریت آسان: ماژول‌های os و shutil مدیریت فایل‌ها و دایرکتوری‌ها را بسیار ساده می‌کنند.
- قابلیت‌های پیشرفته: این ماژول‌ها قابلیت‌های پیشرفته‌ای را برای کار با سیستم فایل فراهم می‌کنند.
- معایب:
- سازگاری سیستم‌عامل: برخی توابع ممکن است در سیستم‌عامل‌های مختلف رفتار متفاوتی داشته باشند.
- پیچیدگی کد: استفاده نادرست از این ماژول‌ها می‌تواند منجر به پیچیدگی و خطاهای غیرمنتظره در کد شود.

برای یادگیری بیشتر در مورد برنامه‌نویسی پایتون و نکات پیشرفته، به کانال تلگرام ما بپیوندید!

#Python #FileManagement #OSModule #Shutil #ProgrammingTips #CodeOptimization #AdvancedPython
👍7
۱. ساخت ابزارهای بررسی کد (Linters)
می‌توانید بررسی کنید که آیا کدی استانداردهای خاصی را رعایت می‌کند یا خیر.

۲. ایجاد ابزارهای بهینه‌سازی کد
کدی که کاربر نوشته است را تغییر دهید تا سریع‌تر اجرا شود.

۳. ساخت ابزارهای تحلیل امنیتی
بررسی کنید که آیا کد شامل الگوهای ناامن است یا نه.

۴. تبدیل کدهای قدیمی به نسخه‌های جدید
مثلاً تغییر کدهایی که برای پایتون ۲ نوشته شده‌اند به نسخه ۳.



تمرین پیشرفته:
۱. ابزاری بنویسید که تمام استفاده‌های متغیر x را در یک فایل پایتون پیدا کند.
۲. برنامه‌ای بسازید که همه حلقه‌های for را به حلقه‌های while تبدیل کند.
۳. ابزاری بنویسید که کدهای طولانی را با دستورهای کوتاه‌تر جایگزین کند.



جمع‌بندی
با درک پیشرفته درخت‌های AST، شما می‌توانید:
- کد را تحلیل و تغییر دهید.
- ابزارهایی مانند مفسر، بهینه‌ساز کد، و بررسی‌کننده استاندارد بنویسید.
- حتی قابلیت‌های جدیدی به زبان پایتون اضافه کنید.

این سطح از آشنایی با AST، مقدمه‌ای عالی برای مراحل بعدی مثل ساخت مفسر است.

🔗 برای آموزش‌های بیشتر، کانال تلگرام ما را دنبال کنید!
[لینک کانال]
#PythonAST #AdvancedPython #CodeOptimization #PythonTools
👍1