Python - Starting a Thread

Trong Python, việc khởi động một luồng liên quan đến việc sử dụng phương thức start() được cung cấp bởi lớp Thread trong mô-đun threading . Phương thức này khởi động hoạt động của luồng và tự động gọi phương thức run() của nó trong một luồng thực thi riêng biệt. Điều này có nghĩa là, khi bạn gọi start() trên mỗi đối tượng luồng (ví dụ, thread1, thread2, thread3) để khởi động việc thực thi của chúng.

Python để khởi động các luồng riêng biệt mà đồng thời thực thi phương thức run() được định nghĩa trong mỗi thể hiện Thread. Và luồng chính tiếp tục thực thi sau khi khởi động các luồng con.

Trong hướng dẫn này, bạn sẽ thấy một giải thích chi tiết và ví dụ về cách sử dụng phương thức start() một cách hiệu quả trong lập trình đa luồng để hiểu hành vi của nó trong các ứng dụng đa luồng.

Starting a Thread in Python

Phương thức start() là cơ bản để bắt đầu thực thi một luồng. Nó thiết lập môi trường cho luồng và lên lịch cho nó chạy. Quan trọng là, phương thức này chỉ nên được gọi một lần cho mỗi đối tượng Thread. Nếu phương thức này được gọi nhiều hơn một lần trên cùng một đối tượng Thread, nó sẽ gây ra lỗi RuntimeError.

Dưới đây là cú pháp để sử dụng phương thức start() trên một đối tượng Thread −

threading.thread.start()

Example

Hãy xem ví dụ dưới đây, minh họa cách bắt đầu một luồng mới trong Python bằng cách sử dụng phương thức 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")

Khi đoạn mã trên được thực thi, nó sẽ tạo ra kết quả sau −

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

Example

Dưới đây là một ví dụ khác minh họa cách hoạt động của phương thức start() . Bạn có thể thấy rằng, bằng cách không gọi phương thức start() trên thread2, nó vẫn không hoạt động và không bắt đầu thực thi.

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")

Mã trên sẽ tạo ra đầu ra sau đây −

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