Hướng dẫn how do i enable multiple threads in python? - làm cách nào để kích hoạt nhiều chủ đề trong python?


Chạy một số luồng tương tự như chạy một số chương trình khác nhau đồng thời, nhưng với các lợi ích sau -

  • Nhiều luồng trong một quy trình chia sẻ cùng một không gian dữ liệu với luồng chính và do đó có thể chia sẻ thông tin hoặc liên lạc với nhau dễ dàng hơn so với nếu chúng là các quy trình riêng biệt.

  • Các chủ đề đôi khi được gọi là các quy trình trọng lượng nhẹ và chúng không yêu cầu nhiều chi phí bộ nhớ; Chúng rẻ hơn các quá trình.

Một chủ đề có một bắt đầu, một chuỗi thực thi và một kết luận. Nó có một con trỏ hướng dẫn theo dõi vị trí trong bối cảnh của nó hiện đang chạy.

  • Nó có thể được chứng minh trước (bị gián đoạn)

  • Nó có thể tạm thời bị tạm dừng (còn được gọi là ngủ) trong khi các chủ đề khác đang chạy - điều này được gọi là năng suất.

Bắt đầu một chủ đề mới

Để sinh ra một luồng khác, bạn cần gọi phương thức sau có sẵn trong mô -đun luồng -

thread.start_new_thread ( function, args[, kwargs] )

Cuộc gọi phương thức này cho phép một cách nhanh chóng và hiệu quả để tạo các luồng mới trong cả Linux và Windows.

Cuộc gọi phương thức trả về ngay lập tức và luồng con bắt đầu và gọi chức năng với danh sách ARG được truyền. Khi chức năng trả về, luồng chấm dứt.

Ở đây, Args là một bộ lý luận; Sử dụng hàm trống để gọi mà không cần truyền bất kỳ đối số nào. KWARGS là một từ điển tùy chọn của các đối số từ khóa.

Thí dụ

#!/usr/bin/python

import thread
import time

# Define a function for the thread
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print "%s: %s" % ( threadName, time.ctime(time.time()) )

# Create two threads as follows
try:
   thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print "Error: unable to start thread"

while 1:
   pass

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

Thread-1: Thu Jan 22 15:42:17 2009
Thread-1: Thu Jan 22 15:42:19 2009
Thread-2: Thu Jan 22 15:42:19 2009
Thread-1: Thu Jan 22 15:42:21 2009
Thread-2: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:25 2009
Thread-2: Thu Jan 22 15:42:27 2009
Thread-2: Thu Jan 22 15:42:31 2009
Thread-2: Thu Jan 22 15:42:35 2009

Mặc dù nó rất hiệu quả đối với luồng cấp thấp, nhưng mô-đun luồng rất hạn chế so với mô-đun luồng mới hơn.

Mô -đun luồng

Mô-đun luồng mới hơn được bao gồm với Python 2.4 cung cấp hỗ trợ cấp cao, mạnh mẽ hơn nhiều cho các luồng so với mô-đun luồng được thảo luận trong phần trước.

Mô -đun luồng hiển thị tất cả các phương thức của mô -đun luồng và cung cấp một số phương thức bổ sung -

  • Chủ đề.ActiveCount () - Trả về số lượng đối tượng luồng đang hoạt động. − Returns the number of thread objects that are active.

  • Chủ đề.CurrentThread () - Trả về số lượng đối tượng luồng trong điều khiển luồng của người gọi. − Returns the number of thread objects in the caller's thread control.

  • Chủ đề.enumerate () - Trả về danh sách tất cả các đối tượng luồng hiện đang hoạt động. − Returns a list of all thread objects that are currently active.

Ngoài các phương thức, mô -đun luồng có lớp luồng thực hiện luồng. Các phương thức được cung cấp bởi lớp luồng như sau -

  • Run () - phương thức Run () là điểm nhập cho một luồng. − The run() method is the entry point for a thread.

  • start () - phương thức start () bắt đầu một luồng bằng cách gọi phương thức chạy. − The start() method starts a thread by calling the run method.

  • Tham gia ([Thời gian]) - The Jopnow () chờ các luồng chấm dứt. − The join() waits for threads to terminate.

  • isalive () - phương thức isalive () kiểm tra xem một luồng có còn thực thi hay không. − The isAlive() method checks whether a thread is still executing.

  • getName () - phương thức getName () trả về tên của một luồng. − The getName() method returns the name of a thread.

  • setName () - phương thức setName () đặt tên của một luồng. − The setName() method sets the name of a thread.

Tạo luồng bằng mô -đun luồng

Để thực hiện một luồng mới bằng mô -đun luồng, bạn phải thực hiện các bài viết sau -

  • Xác định một lớp con mới của lớp luồng.

  • Ghi đè phương thức __init __ (self [, args]) để thêm các đối số bổ sung.

  • Sau đó, ghi đè phương thức chạy (tự [, args]) để thực hiện những gì luồng nên làm khi bắt đầu.

Khi bạn đã tạo lớp con luồng mới, bạn có thể tạo một thể hiện của nó và sau đó bắt đầu một luồng mới bằng cách gọi start (), lần lượt gọi phương thức Run ().

Thí dụ

#!/usr/bin/python

import threading
import time

exitFlag = 0

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, 5, self.counter)
      print "Exiting " + self.name

def print_time(threadName, counter, delay):
   while counter:
      if exitFlag:
         threadName.exit()
      time.sleep(delay)
      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)

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

print "Exiting Main Thread"

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

Starting Thread-1
Starting Thread-2
Exiting Main Thread
Thread-1: Thu Mar 21 09:10:03 2013
Thread-1: Thu Mar 21 09:10:04 2013
Thread-2: Thu Mar 21 09:10:04 2013
Thread-1: Thu Mar 21 09:10:05 2013
Thread-1: Thu Mar 21 09:10:06 2013
Thread-2: Thu Mar 21 09:10:06 2013
Thread-1: Thu Mar 21 09:10:07 2013
Exiting Thread-1
Thread-2: Thu Mar 21 09:10:08 2013
Thread-2: Thu Mar 21 09:10:10 2013
Thread-2: Thu Mar 21 09:10:12 2013
Exiting Thread-2

Mặc dù nó rất hiệu quả đối với luồng cấp thấp, nhưng mô-đun luồng rất hạn chế so với mô-đun luồng mới hơn.

Mô -đun luồng

Mô-đun luồng mới hơn được bao gồm với Python 2.4 cung cấp hỗ trợ cấp cao, mạnh mẽ hơn nhiều cho các luồng so với mô-đun luồng được thảo luận trong phần trước.

Mô -đun luồng hiển thị tất cả các phương thức của mô -đun luồng và cung cấp một số phương thức bổ sung -

Chủ đề.ActiveCount () - Trả về số lượng đối tượng luồng đang hoạt động.

Thí dụ

#!/usr/bin/python

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
      # Get lock to synchronize threads
      threadLock.acquire()
      print_time(self.name, self.counter, 3)
      # Free lock to release next thread
      threadLock.release()

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

threadLock = threading.Lock()
threads = []

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

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

# Add threads to thread list
threads.append(thread1)
threads.append(thread2)

# Wait for all threads to complete
for t in threads:
    t.join()
print "Exiting Main Thread"

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

Starting Thread-1
Starting Thread-2
Thread-1: Thu Mar 21 09:11:28 2013
Thread-1: Thu Mar 21 09:11:29 2013
Thread-1: Thu Mar 21 09:11:30 2013
Thread-2: Thu Mar 21 09:11:32 2013
Thread-2: Thu Mar 21 09:11:34 2013
Thread-2: Thu Mar 21 09:11:36 2013
Exiting Main Thread

Mặc dù nó rất hiệu quả đối với luồng cấp thấp, nhưng mô-đun luồng rất hạn chế so với mô-đun luồng mới hơn.

Mô -đun luồng

  • Mô-đun luồng mới hơn được bao gồm với Python 2.4 cung cấp hỗ trợ cấp cao, mạnh mẽ hơn nhiều cho các luồng so với mô-đun luồng được thảo luận trong phần trước. − The get() removes and returns an item from the queue.

  • Mô -đun luồng hiển thị tất cả các phương thức của mô -đun luồng và cung cấp một số phương thức bổ sung - − The put adds item to a queue.

  • Chủ đề.ActiveCount () - Trả về số lượng đối tượng luồng đang hoạt động. − The qsize() returns the number of items that are currently in the queue.

  • Chủ đề.CurrentThread () - Trả về số lượng đối tượng luồng trong điều khiển luồng của người gọi. − The empty( ) returns True if queue is empty; otherwise, False.

  • Chủ đề.enumerate () - Trả về danh sách tất cả các đối tượng luồng hiện đang hoạt động. − the full() returns True if queue is full; otherwise, False.

Thí dụ

#!/usr/bin/python

import Queue
import threading
import time

exitFlag = 0

class myThread (threading.Thread):
   def __init__(self, threadID, name, q):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.q = q
   def run(self):
      print "Starting " + self.name
      process_data(self.name, self.q)
      print "Exiting " + self.name

def process_data(threadName, q):
   while not exitFlag:
      queueLock.acquire()
         if not workQueue.empty():
            data = q.get()
            queueLock.release()
            print "%s processing %s" % (threadName, data)
         else:
            queueLock.release()
         time.sleep(1)

threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = Queue.Queue(10)
threads = []
threadID = 1

# Create new threads
for tName in threadList:
   thread = myThread(threadID, tName, workQueue)
   thread.start()
   threads.append(thread)
   threadID += 1

# Fill the queue
queueLock.acquire()
for word in nameList:
   workQueue.put(word)
queueLock.release()

# Wait for queue to empty
while not workQueue.empty():
   pass

# Notify threads it's time to exit
exitFlag = 1

# Wait for all threads to complete
for t in threads:
   t.join()
print "Exiting Main Thread"

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

Starting Thread-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread

Làm thế nào để bạn chạy nhiều chủ đề trong Python?

Để sử dụng đa luồng, chúng ta cần nhập mô -đun luồng trong chương trình Python. Một phương thức start () được sử dụng để bắt đầu hoạt động của một luồng. Và nó chỉ gọi một lần cho mỗi luồng để việc thực thi luồng có thể bắt đầu.import the threading module in Python Program. A start() method is used to initiate the activity of a thread. And it calls only once for each thread so that the execution of the thread can begin.

Làm cách nào để kích hoạt các chủ đề trong Python?

Bạn cần gán đối tượng luồng cho một biến và sau đó khởi động nó bằng cách sử dụng điều đó: Thread1 = Threading.Thread (Target = F) theo sau là Thread1.start ().Sau đó, bạn có thể làm Thread1.thread1=threading. Thread(target=f) followed by thread1. start() . Then you can do thread1.

Bạn có thể chạy bao nhiêu chủ đề cùng một lúc?

Điều này có nghĩa là trong Python, chỉ có một luồng sẽ được thực thi tại một thời điểm.Bằng cách chỉ cho phép một luồng được sử dụng mỗi khi chúng tôi chạy quy trình Python, điều này đảm bảo rằng chỉ có một luồng có thể truy cập một tài nguyên cụ thể tại một thời điểm và nó cũng ngăn chặn việc sử dụng các đối tượng và byte cùng một lúc.one thread will be executed at a time. By only allowing a single thread to be used every time we run a Python process, this ensures that only one thread can access a particular resource at a time and it also prevents the use of objects and bytecodes at once.

Làm thế nào để bạn làm nhiều chủ đề?

Chúng ta có thể đạt được chức năng cơ bản của một luồng bằng cách mở rộng lớp luồng vì nó cung cấp một số phương thức sẵn có như m suất (), ngắt (), v.v. không có sẵn trong giao diện có thể chạy được.Sử dụng Runnable sẽ cung cấp cho bạn một đối tượng có thể được chia sẻ giữa nhiều luồng.extending Thread class because it provides some inbuilt methods like yield(), interrupt() etc. that are not available in Runnable interface. Using runnable will give you an object that can be shared amongst multiple threads.