Ví dụ về lập trình đa luồng trong Python
Cách hoạt động của đa luồng 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 một cách đồng thời, nhưng với những 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 giao tiếp với nhau dễ dàng hơn nếu chúng là các quy trình riêng biệt.
- Các luồng đôi khi được gọi là các quy trình nhẹ và chúng không yêu cầu nhiều bộ nhớ; chúng rẻ hơn các quy trình.
Một chuỗi có một phần mở đầu, một chuỗi thực thi và một phần kết luận. Nó có một con trỏ hướng dẫn theo dõi vị trí mà nó hiện đang chạy trong ngữ cảnh của nó.
- Nó có thể được làm trống trước
- Nó có thể tạm thời được đặt ở trạng thái chờ (còn được gọi là ngủ) trong khi các luồng khác đang chạy - điều này được gọi là năng suất.
>>> Xem thêm:Tuples trong Python - Cách sử dụng Tuples trong Python
Cách bắt đầu luồng mới trong Python
Để tạo ra một luồng khác, bạn cần gọi phương thức có sẵn trong mô- đun luồng như dưới đây:
thread.start_new_thread ( function, args[, kwargs] )
Lệnh gọi phương thức cho phép tạo các luồng mới trong ở Linux và Window một cách nhanh chóng và hiệu quả
Trong phương thức trên, args là một loạt các đối số, sử dụng một bộ giá trị trống để gọi hàm mà không chuyển bất kỳ đối số nào. kwargs là một từ điển tùy chọn cả các đối số từ khóa.
Ví 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 đoạn mã trên được thực thi, kết quả ta nhận được như 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
>>> Tham khảo: Khóa học lập trình Python
Các luồng mô đun trong Python
Mô đun luồng mới được dùng trong 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 cho thấy tất cả các phương pháp của mô-đun thread và cung cấp một số phương thức như sau:
- threading.activeCount() −Trả về số đối tượng luồng đang hoạt động.threading.
- currentThread() − Trả về số đối tượng luồng trong điều khiển luồng của người gọi.threading.enumerate()
− Trả về danh sách tất cả các đối tượng luồng hiện đang hoạt động.
Ngoài các phương pháp, mô-đun threading có lớp Thread thực hiện luồng. Các phương thức được cung cấp bởi lớp Thread như sau:
- run () - Phương thức run () là điểm vào của một luồng.
- start () - Phương thức start () bắt đầu một luồng bằng cách gọi phương thức run.
- join ([time]) - đợi luồng kết thúc.is
- Alive () - Phương thức is Alive () kiểm tra xem một luồng có còn đang thực thi hay không.
- getName () - Phương thức getName () trả về tên của một luồng.set
- Name () - Phương thức setName () đặt tên của một luồng.
Tạo luồng sử dụng Threading Module
Để thực hiện một luồng mới sử dụng mô đun threading, bạn cần phải làm theo những điều sau:
- Xác định một lớp phụ của lớp Thread
- Ghi đè phương thức __init __ (self [, args]) để thêm các đối số bổ sung.
- Sau đó, ghi đè phương thức run (self [, args]) để triển khai những gì luồng sẽ làm khi bắt đầu.
Khi bạn đã tạo lớp con Thread 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 (), đến lượt nó sẽ gọi run ()
Queue đa luồng ưu tiên trong Python
Các mô-đun Queue cho phép bạn tạo một đối tượng hàng đợi mới có thể tổ chức một số cụ thể của các mặt hàng. Có các phương pháp sau để kiểm soát Hàng đợi:
- get () - Hàm get () xóa và trả về một mục từ hàng đợi.
- put () - Đặt thêm mục vào hàng đợi.
- qsize ()- qsize () trả về số lượng các mục hiện đang có trong hàng đợi.
- rỗng () - Giá trị rỗng () trả về giá trị True nếu hàng đợi trống; ngược lại, Sai.
full () - full () trả về True nếu queue đầy; ngược lại, Sai.
Kết luận: Lập trình đa luồng trong Python vô cùng hữu ích cho cho các ứng dụng web hoặc các dự án các nhân. Đây sẽ là công cụ hỗ trợ hữu ích cho lập trình viên khi làm việc với Python. Cùng tìm hiểu thêm về lập trình Python và các ngôn ngữ lập trình khác qua các khóa học lập trình tại T3H.