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
نکته‌ای جالب در مورد متغیرها در پایتون که کمتر کسی می‌داند

پایتون از روش مقادیر تعویض پذیر در سطح داخلی برای بهینه‌سازی حافظه استفاده می‌کند. این بدان معناست که برخی از اشیاء در پایتون، مانند رشته‌ها و اعداد صحیح کوچک، به صورت خودکار به اشتراک گذاشته می‌شوند. این ویژگی باعث می‌شود که دو متغیر مختلف که به یک مقدار کوچک و یا یکسان اشاره می‌کنند، در واقع به یک شیء در حافظه اشاره کنند. 😲

مثال:

a = 256
b = 256

print(a is b) # خروجی: True

c = 257
d = 257

print(c is d) # خروجی: False

در اینجا، مقدار 256 در هر دو متغیر a و b به یک شیء در حافظه اشاره می‌کنند، اما مقدار 257 اینگونه نیست.

توضیحات:
- تعویض‌پذیری اعداد کوچک:
پایتون اعداد صحیح کوچک را به صورت داخلی به اشتراک می‌گذارد (معمولاً اعداد بین -5 تا 256).
- اشتراک رشته‌ها:
رشته‌های کوتاه و ثابت نیز به صورت خودکار به اشتراک گذاشته می‌شوند.

این رفتار می‌تواند در بهینه‌سازی حافظه و همچنین درک بهتر از نحوه مدیریت حافظه در پایتون کمک کند.

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

#Python #Variables #MemoryManagement #ProgrammingTips #LearningPython
👍3
Forwarded from گوربه
# بارگذاری فایل XML
tree = etree.parse('example.xml')

# اعمال تغییرات XSLT به فایل XML
new_tree = transform(tree)

# نمایش XML جدید به صورت زیبا
print(etree.tostring(new_tree, pretty_print=True).decode())

🔍 توضیحات: این کد یک فایل XML را با استفاده از XSLT تغییر داده و نتیجه را نمایش می‌دهد.


10. تغییر تگ‌ها و ویژگی‌ها 🛠️
تغییر تگ‌ها و ویژگی‌ها در یک فایل XML:

from lxml import etree

# بارگذاری فایل XML
tree = etree.parse('example.xml')
root = tree.getroot()

# تکرار روی تمامی عناصر با نام تگ مشخص شده
for element in root.iter('tag_name'):
# تغییر نام تگ
element.tag = 'new_tag'

# اضافه کردن ویژگی جدید
element.set('new_attribute', 'value')

# ذخیره فایل XML تغییر یافته
tree.write('modified.xml', pretty_print=True)

🔍 توضیحات: این کد تگ‌ها و ویژگی‌های یک فایل XML را تغییر داده و نتیجه را در یک فایل ذخیره می‌کند.


11. حذف تگ‌ها
حذف تگ‌ها از یک فایل XML:

from lxml import etree

# بارگذاری فایل XML
tree = etree.parse('example.xml')
root = tree.getroot()

# پیدا کردن و حذف تمامی عناصر با نام تگ مشخص شده
for element in root.findall('tag_name'):
root.remove(element)

# ذخیره فایل XML بدون تگ‌های مشخص شده
tree.write('cleaned.xml', prettyتوضیحات:

🔍 توضیحات: این کد تگ‌های مشخص شده را از یک فایل XML حذف کرده و نتیجه را در یک فایل ذخیره می‌کند.


12. تبدیل XML به دیکشنری📚
تبدیل یک فایل XML به دیکشنری پایتون:

from lxml import etree

# تعریف تابع تبدیل XML به دیکشنری
def xml_to_dict(element):
return {element.tag: {child.tag: xml_to_dict(child) for child in element} or element.text}

# بارگذاری فایل XML
tree = etree.parse('example.xml')
root = tree.getroot()

# تبدیل XML به دیکشنری
data_dict = xml_to_dict(root)
prتوضیحات:t)

🔍 توضیحات: این کد یک فایل XML را به دیکشنری پایتون تبدیل کرده و نتیجه را نمایش می‌دهد.

این آموزش به شما نشان داد که چگونه می‌توانید از کتابخانه lxml برای کار با XML و HTML استفاده کنید. امیدوارم این مثال‌ها برای شما مفید بوده باشد! 🌟

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

#Python #lxml #Coding #ProgrammingTips #Tech #XML #HTML
👍1
Forwarded from گوربه
کدهای کاربردی با کتابخانه lxml در پایتون🐍

کتابخانه lxml یکی از ابزارهای قدرتمند برای پردازش XML و HTML در پایتون است. این کتابخانه امکانات زیادی را برای استخراج، تغییر و اعتبارسنجی داده‌ها فراهم می‌کند. در ادامه ۱۲ مثال کاربردی با استفاده از این کتابخانه آورده شده است که می‌تواند برای برنامه‌نویسان بسیار مفید باشد. 1. پارس کردن یک فایل XML 📄
پارس کردن فایل XML و نمایش محتوای آن:
from lxml import etree

tree = etree.parse('example.xml')
root = tree.getroot()
print(etree.tostring(root, pretty_print=True).decode())

2. پارس کردن یک رشته XML📝
پارس کردن یک رشته XML و نمایش محتوای آن:
from lxml import etree

xml_data = '<root><child>data</child></root>'
root = etree.fromstring(xml_data)
print(etree.tostring(root, pretty_print=True).decode())

3. استخراج مقادیر تگ‌ها 🔍
استخراج مقادیر تگ‌ها از یک فایل XML:
from lxml import etree

tree = etree.parse('example.xml')
for element in tree.iter('tag_name'):
print(element.text)

4. اضافه کردن تگ جدید به XML
ایجاد و اضافه کردن تگ جدید به یک فایل XML:
from lxml import etree

root = etree.Element("root")
child = etree.SubElement(root, "child")
child.text = "data"
tree = etree.ElementTree(root)
tree.write("output.xml", pretty_print=True)

5. جستجو با XPath 🔎
جستجو در فایل XML با استفاده از XPath:
from lxml import etree

tree = etree.parse('example.xml')
result = tree.xpath('//tag_name')
for element in result:
print(etree.tostring(element, pretty_print=True).decode())

6. اعتبارسنجی XML با DTD
اعتبارسنجی XML با استفاده از DTD:
from lxml import etree

dtd = etree.DTD('example.dtd')
tree = etree.parse('example.xml')
is_valid = dtd.validate(tree)
print(is_valid)

7. ایجاد یک HTML ساده🌐
ایجاد یک فایل HTML ساده با استفاده از lxml:
from lxml import etree, html

root = html.Element("html")
body = html.SubElement(root, "body")
p = html.SubElement(body, "p")
p.text = "Hello, world!"
tree = html.ElementTree(root)
tree.write("output.html", pretty_print=True)

8. استخراج لینک‌ها از یک صفحه HTML 🔗
استخراج تمام لینک‌ها از یک صفحه HTML:
from lxml import html

page = html.parse('example.html')
links = page.xpath('//a/@href')
print(links)

9. استفاده از XSLT برای تغییر XML 🔄
تغییر XML با استفاده از XSLT:
from lxml import etree

xslt_root = etree.parse('transform.xslt')
transform = etree.XSLT(xslt_root)
tree = etree.parse('example.xml')
new_tree = transform(tree)
print(etree.tostring(new_tree, pretty_print=True).decode())

10. تغییر تگ‌ها و ویژگی‌ها 🛠️
تغییر تگ‌ها و ویژگی‌ها در یک فایل XML:
from lxml import etree

tree = etree.parse('example.xml')
root = tree.getroot()
for element in root.iter('tag_name'):
element.tag = 'new_tag'
element.set('new_attribute', 'value')
tree.write('modified.xml', pretty_print=True)

11. حذف تگ‌ها
حذف تگ‌ها از یک فایل XML:

from lxml import etree

tree = etree.parse('example.xml')
root = tree.getroot()
for element in root.findall('tag_name'):
root.remove(element)
tree.write('cleaned.xml', pretty_print=True)

12. تبدیل XML به دیکشنری 📚
تبدیل یک فایل XML به دیکشنری پایتون:

from lxml import etree

def xml_to_dict(element):
return {element.tag: {child.tag: xml_to_dict(child) for child in element} or element.text}

tree = etree.parse('example.xml')
root = tree.getroot()
data_dict = xml_to_dict(root)
print(data_dict)

این کدها نمونه‌هایی از استفاده‌های مختلف از کتابخانه lxml هستند که می‌توانید در پروژه‌های خود از آن‌ها بهره ببرید. 🌟

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

#Python #lxml #Coding #ProgrammingTips #Tech #XML #HTML
👍1
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