رسانه آموزشی پرونش
جستجو برای:
سبد خرید 0
  • خانه
  • بسته‌های آموزش‌ها
  • مقالات آموزشی
  • رویدادها
  • محصولات
  • تماس با ما
    • مشهد - شهرک غرب - ساختمان اکسین
      051-36000050
      info@pronesh.ir
      اینستاگرام
      کانال تلگرام
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]

داده های شخصی شما برای پشتیبانی از تجربه شما در این وب سایت، برای مدیریت دسترسی به حساب کاربری شما و برای اهداف دیگری که در privacy policy ما شرح داده می شود مورد استفاده قرار می گیرد.

رسانه آموزشی پرونش
  • خانه
  • بسته‌های آموزش‌ها
  • مقالات آموزشی
  • رویدادها
  • محصولات
  • تماس با ما
    • مشهد - شهرک غرب - ساختمان اکسین
      051-36000050
      info@pronesh.ir
      اینستاگرام
      کانال تلگرام
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

برنامه نویسی چند نخی (Multithreading) در پایتون

برنامه نویسی

مقدمه

برنامه‌نویسی Multithreading یکی از مفاهیم مهم در توسعه نرم‌افزار است که به برنامه‌ها اجازه می‌دهد چندین کار را به صورت همزمان انجام دهند. در پایتون، ماژول threading این امکان را فراهم می‌کند تا بتوانید Thread (رشته) ایجاد کنید و از مزایای Multithreading بهره‌مند شوید. در این مقاله، به طور کامل با Multithreading در پایتون آشنا می‌شویم و در پایان یک مثال کاربردی ارائه می‌دهیم.

Thread چیست؟

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

چرا از Multithreading استفاده کنیم؟

  • بهبود عملکرد: برای کارهایی که نیاز به انتظار دارند (مانند I/O Operations)، Multithreading می‌تواند زمان اجرا را کاهش دهد.

  • پاسخگویی بهتر: در برنامه‌های گرافیکی یا وب‌سرورها، Multithreading باعث می‌شود برنامه به درخواست‌های کاربران سریع‌تر پاسخ دهد.

  • استفاده بهینه از منابع: با استفاده از Multithreading، می‌توانید از منابع سیستم مانند CPU و حافظه بهینه‌تر استفاده کنید.


ماژول threading در پایتون

پایتون برای کار با Threadها، ماژول threading را ارائه می‌دهد. این ماژول ابزارهای لازم برای ایجاد و مدیریت Threadها را در اختیار شما قرار می‌دهد.

ایجاد یک Thread ساده

برای ایجاد یک Thread، ابتدا باید یک تابع تعریف کنید که قرار است در Thread اجرا شود. سپس از کلاس Thread در ماژول threading استفاده کنید.

 

مثال ساده:

				
					import threading

def print_numbers():
    for i in range(10):
        print(i)

# ایجاد یک Thread
thread = threading.Thread(target=print_numbers)

# شروع اجرای Thread
thread.start()

# منتظر ماندن تا Thread کارش تمام شود
thread.join()

print("Thread execution completed.")
				
			

توضیح کد:

 

  • تابع print_numbers: این تابع اعداد ۰ تا ۹ را چاپ می‌کند.

  • threading.Thread: یک Thread جدید ایجاد می‌کند که تابع print_numbers را اجرا می‌کند.

  • thread.start(): Thread را شروع می‌کند.

  • ()thread.join: منتظر می‌ماند تا Thread کارش تمام شود.

مدیریت چندین Thread

شما می‌توانید چندین Thread ایجاد کنید و آن‌ها را به صورت همزمان اجرا کنید.

 

مثال:

				
					import threading

def print_numbers(thread_name):
    for i in range(5):
        print(f"{thread_name}: {i}")

# ایجاد دو Thread
thread1 = threading.Thread(target=print_numbers, args=("Thread-1",))
thread2 = threading.Thread(target=print_numbers, args=("Thread-2",))

# شروع اجرای Threadها
thread1.start()
thread2.start()

# منتظر ماندن تا Threadها کارشان تمام شود
thread1.join()
thread2.join()

print("All threads completed.")
				
			

توضیح کد:

 

  • args: برای ارسال آرگومان‌ها به تابع استفاده می‌شود.

  • هر Thread به صورت مستقل اجرا می‌شود و خروجی آن‌ها ممکن است با هم ترکیب شود.

مشکلات Multithreading و راه‌حل‌ها

  • Race Condition: هنگامی که چند Thread به یک منبع مشترک دسترسی داشته باشند، ممکن است مشکلاتی پیش بیاید.

  • Deadlock: هنگامی که دو Thread منتظر یکدیگر بمانند، برنامه قفل می‌کند.

برای حل این مشکلات، از Lock استفاده می‌کنیم.

 

مثال استفاده از Lock:

				
					import threading

# ایجاد یک Lock
lock = threading.Lock()

def print_numbers(thread_name):
    for i in range(5):
        lock.acquire()  # قفل کردن
        print(f"{thread_name}: {i}")
        lock.release()  # آزاد کردن قفل

# ایجاد دو Thread
thread1 = threading.Thread(target=print_numbers, args=("Thread-1",))
thread2 = threading.Thread(target=print_numbers, args=("Thread-2",))

# شروع اجرای Threadها
thread1.start()
thread2.start()

# منتظر ماندن تا Threadها کارشان تمام شود
thread1.join()
thread2.join()

print("All threads completed.")
				
			

توضیح کد:

 

  • ()lock.acquire: قبل از دسترسی به منبع مشترک، قفل می‌شود.

  • ()lock.release: پس از اتمام کار، قفل آزاد می‌شود.

پروژه دانلود همزمان چند فایل

ب رای درک بهتر مفاهیم ارائه شده در این مثال، از Multithreading برای دانلود همزمان چند فایل از اینترنت استفاده می‌کنیم.

 

کد:

				
					import threading
import requests

def download_file(url, filename):
    response = requests.get(url)
    with open(filename, 'wb') as file:
        file.write(response.content)
    print(f"{filename} downloaded.")

# لیست URL فایل‌ها
urls = [
    "https://example.com/file1.zip",
    "https://example.com/file2.zip",
    "https://example.com/file3.zip"
]

# ایجاد Threadها
threads = []
for i, url in enumerate(urls):
    filename = f"file{i+1}.zip"
    thread = threading.Thread(target=download_file, args=(url, filename))
    threads.append(thread)
    thread.start()

# منتظر ماندن تا همه Threadها تمام شوند
for thread in threads:
    thread.join()

print("All files downloaded.")
				
			

توضیح کد:

  • تابع download_file: یک فایل را از URL داده شده دانلود می‌کند و در فایل محلی ذخیره می‌کند.

  • ایجاد Threadها: برای هر URL یک Thread ایجاد می‌شود.

  • ()thread.join: منتظر می‌ماند تا همه Threadها کارشان تمام شود.

جمع‌بندی

در این مقاله، با مفاهیم پایه‌ای Multithreading در پایتون آشنا شدید. یاد گرفتید چگونه Thread ایجاد کنید، چندین Thread را مدیریت کنید و از Lock برای جلوگیری از مشکلات Race Condition استفاده کنید. در نهایت، یک مثال کاربردی برای دانلود همزمان چند فایل ارائه شد.

Multithreading یک ابزار قدرتمند است، اما نیاز به دقت و مدیریت دارد تا از مشکلاتی مانند Deadlock یا Race Condition جلوگیری شود.

برچسب ها: آموزش برنامه نویسی چند نخی
قبلی تفاوت برنامه نویسی چند پردازشی و چند نخی

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
پشتیبانی
دسته‌ها
  • برنامه نویسی
  • عمومی
  • هوش مصنوعی
برچسب‌ها
ai ChatGPT copilot json python spyder xml آموزش ChatGPT آموزش برنامه نویسی چند نخی اسپایدر بازی دوز دستیار هوشمند سورس کد مدیریت فایل نصب هوش مصنوعی ٍExcel درپایتون پایتون پردازش تصویر پروژه پروژه c++ پروژه java پروژه python پروژه با سورس کد پروژه جاوا پروژه دفترچه تلفن پروژه سی پروژه ماشین حساب پروژه پایتون چت جی پی تی
رسانه آموزش آنلاین پرونش قصد دارد با همکاری انشارات هوش‌آموز یکی از بهترین و کاراترین مراکز آموزشی در ضمینه علوم کامپیوتر را با استفاده از منابع معتبر، به صورت کامل کاربردی و پروژه محور، با هدف آموزش جهت ورودی به بازار کار در اختیار علاقمندان قرار دهد. از شما درخواست می‌کنیم با استفاده قانونی از محصولات این سایت ما را در راستای رسیدن به این منظور یاری کنید.
دسترسی سریع
  • خانه
  • دوره ها
  • اخبار
  • تماس با ما
خبرنامه

چیزی را از دست ندهید، ثبت نام کنید و در مورد شرکت ما مطلع باشید.

نمادها
© 1404. رسانه آموزشی پرونش Pronesh

هوش مصنوعی

  • 11 دوره

حل تمرین

  • 2 دوره

متلب

  • 12 دوره

++C/C

  • 1 دوره

پایتون

  • 2 دوره

برنامه نویسی

  • 10 نوشته

عمومی

  • 1 نوشته

هوش مصنوعی

  • 6 نوشته
برای مشاهده خریدهای خود باید وارد حساب کاربری خود شوید
Facebook Twitter Youtube Instagram Whatsapp