برنامه‌نویسی همزمان (Concurrency) در پایتون

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی پایتون 10 مارس 2025
اشتراک گذاری

 مقدمه‌ای بر برنامه‌نویسی همزمان (Concurrency)


برنامه‌نویسی همزمان یکی از مهم‌ترین تکنیک‌ها در دنیای نرم‌افزار است که امکان اجرای چندین کار به‌طور همزمان را فراهم می‌کند. در پایتون، همزمانی را می‌توان با استفاده از چندنخی (Multithreading)، چندپردازشی (Multiprocessing) و برنامه‌نویسی ناهمگام (Asynchronous Programming) پیاده‌سازی کرد.


2. اجرای چندوظیفه‌ای (Multithreading & Multiprocessing)



  • Multithreading: این روش برای اجرای چندین نخ (Thread) در یک فرآیند استفاده می‌شود. به دلیل محدودیت Global Interpreter Lock (GIL) در پایتون، نخ‌ها نمی‌توانند به‌طور همزمان روی چندین هسته پردازنده اجرا شوند، اما برای وظایف I/O محور مانند خواندن/نوشتن فایل، درخواست‌های شبکه‌ای و کار با پایگاه داده مفید است.

  • Multiprocessing: این روش برای ایجاد چندین فرآیند مستقل استفاده می‌شود که هر یک دارای حافظه و پردازنده مجزا هستند. این روش مناسب برای پردازش‌های CPU محور است.


3. مدیریت نخ‌ها (Threads) با threading module


برای اجرای چندوظیفه‌ای با استفاده از نخ‌ها، از ماژول threading در پایتون استفاده می‌کنیم:


import threading
import time
def print_numbers():
for i in range(5):
time.sleep(1)
print(f'Number: {i}')
thread1 = threading.Thread(target=print_numbers)
thread1.start()
print("Main thread continues...")
thread1.join()
print("Thread finished!")

ویژگی‌های threading



  • ایجاد و اجرای نخ‌ها

  • مدیریت نخ‌ها با join()

  • قفل‌گذاری برای جلوگیری از مشکلات Race Condition


4. مدیریت فرآیندها (Processes) با multiprocessing module


برای پردازش‌های CPU محور، از ماژول multiprocessing استفاده می‌شود:


import multiprocessing
def square(n):
return n * n
if __name__ == "__main__":
with multiprocessing.Pool(processes=4) as pool:
numbers = [1, 2, 3, 4, 5]
results = pool.map(square, numbers)
print(results)

ویژگی‌های multiprocessing



  • اجرای موازی فرآیندها

  • تخصیص منابع بهینه

  • استفاده از Pool برای پردازش دسته‌ای داده‌ها


5. استفاده از asyncio برای برنامه‌نویسی ناهمگام (Asynchronous Programming)


asyncio ماژولی برای اجرای کدهای ناهمگام است که به جای استفاده از نخ‌ها و فرآیندها، از کرونا (Coroutine) استفاده می‌کند. این روش برای وظایف I/O محور مانند ارتباطات شبکه‌ای بسیار مؤثر است.


import asyncio
async def say_hello():
await asyncio.sleep(1)
print("Hello, Asyncio!")
async def main():
await asyncio.gather(say_hello(), say_hello())
asyncio.run(main())

ویژگی‌های asyncio



  • مدیریت کارهای ناهمگام با async و await

  • اجرای وظایف به‌صورت همزمان با gather()

  • بهینه‌سازی مصرف منابع سیستم


6. مقایسه‌ی threading، multiprocessing و asyncio





































ویژگی Threading Multiprocessing Asyncio
مناسب برای وظایف I/O محور وظایف CPU محور وظایف I/O محور
حافظه اشتراکی بله خیر خیر
مدیریت منابع کم زیاد کم
پیچیدگی متوسط بالا پایین

7. نتیجه‌گیری



  • اگر وظایف شما I/O محور هستند، threading یا asyncio مناسب‌ترند.

  • اگر وظایف شما CPU محور هستند، multiprocessing گزینه بهتری است.

  • asyncio کارآمدتر از threading برای عملیات I/O است، زیرا بدون قفل GIL اجرا می‌شود.


با یادگیری این تکنیک‌ها، می‌توانید برنامه‌های پایتون خود را بهینه و کارآمدتر کنید!

نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.