آموزش پایتون - شروع Thread

در پایتون، شروع یک نخ (Thread) شامل استفاده از متد start() است که توسط کلاس Thread در ماژول threading ارائه می‌شود. این متد فعالیت نخ را آغاز می‌کند و به‌طور خودکار متد run() آن را در یک نخ اجرای جداگانه فراخوانی می‌نماید. به این معنی که وقتی start() را روی هر شیء نخ (به عنوان مثال thread1، thread2، thread3) فراخوانی می‌کنید، اجرای آن‌ها آغاز می‌شود.

پایتون نخ‌های جداگانه‌ای را راه‌اندازی می‌کند که متد run() تعریف‌شده در هر نمونه Thread را به‌طور هم‌زمان اجرا می‌کنند. و نخ اصلی پس از شروع نخ‌های فرزند، به اجرای خود ادامه می‌دهد.

در این آموزش، توضیح مفصل و مثالی از نحوه استفاده موثر از متد start() در برنامه‌نویسی چندنخی را خواهید دید تا رفتار آن را در برنامه‌های چندنخی درک کنید.

شروع یک نخ در پایتون

متد start() برای شروع اجرای یک نخ اساسی است. این متد محیط نخ را آماده‌سازی کرده و آن را برای اجرا زمان‌بندی می‌کند. نکته مهم این است که این متد برای هر شیء Thread فقط باید یک بار فراخوانی شود. اگر این متد بیش از یک بار روی یک شیء Thread فراخوانی شود، یک خطای RuntimeError رخ خواهد داد.

در ادامه ساختار نحوی استفاده از متد start() روی یک شیء Thread آمده است −

threading.thread.start()

مثال

بیایید مثال زیر را بررسی کنیم که نحوه شروع یک نخ جدید در پایتون با استفاده از متد start() را نشان می‌دهد.

from threading import Thread
from time import sleep

def my_function(arg):
   for i in range(arg):
      print("child Thread running", i)
      sleep(0.5)
thread = Thread(target = my_function, args = (10, ))
thread.start()
print("thread finished...exiting")

هنگامی که کد بالا اجرا می‌شود، نتیجه زیر را تولید می‌کند

child Thread running 0
thread finished...exiting
child Thread running 1
child Thread running 2
child Thread running 3
child Thread running 4
child Thread running 5
child Thread running 6
child Thread running 7
child Thread running 8
child Thread running 9

مثال

در اینجا مثال دیگری وجود دارد که نحوه کار متد start() را نشان می‌دهد. می‌توانید مشاهده کنید که با عدم فراخوانی متد start() روی thread2، این نخ غیرفعال می‌ماند و اجرای خود را آغاز نمی‌کند.

import threading
import time

class MyThread(threading.Thread):
   def __init__(self, threadID, name, counter):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.counter = counter

   def run(self):
      print("Starting " + self.name)
      print_time(self.name, self.counter)
      print("Exiting " + self.name)

def print_time(threadName, counter):
   while counter:
      time.sleep(1)
      print("%s: %s" % (threadName, time.ctime(time.time())))
      counter -= 1

# Create new threads
thread1 = MyThread(1, "Thread-1", 1)
thread2 = MyThread(2, "Thread-2", 2)
thread3 = MyThread(3, "Thread-3", 3)

# Start new Threads
thread1.start()
thread3.start()

print("Exiting Main Thread")

کد بالا خروجی زیر را تولید خواهد کرد −

Starting Thread-1
Starting Thread-3
Exiting Main Thread
Thread-1: Mon Jun 24 18:24:59 2024
Exiting Thread-1
Thread-3: Mon Jun 24 18:24:59 2024
Thread-3: Mon Jun 24 18:25:00 2024
Thread-3: Mon Jun 24 18:25:01 2024
Exiting Thread-3

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.