Python cung cấp thread Module và threading Module để bạn có thể bắt đầu một thread mới cũng như một số tác vụ khác trong khi lập trình đa luồng. Mỗi một Thread đều có vòng đời chung là bắt đầu, chạy và kết thúc. Một Thread có thể bị ngắt (interrupt), hoặc tạm thời bị dừng (sleeping) trong khi các Thread khác đang chạy – được gọi là yielding.
Phương thức dưới đây có sẵn trong thread Module được sử dụng để bắt đầu một Thread mới:
thread.start_new_thread ( function, args[, kwargs] )
Lời gọi phương thức này được trả về ngay lập tức và Thread con bắt đầu và gọi hàm function với danh sách các tham số args đã truyền. Khi hàm function trả về, thì Thread kết thúc.
Ở đây, args là một Tuple của các tham số, sử dụng một Tuple trống để gọi hàm function mà không truyền cho nó bất kỳ tham số nào. Tham số kwargs là một Dictionary của các tham số từ khóa tùy ý. (bạn thao khảo chương Hàm trong Python để biết chi tiết tham số từ khóa là gì)
import thread import time# Dinh nghia mot ham cho thread def print_time( threadName, delay): count = 0 while count < 5: time.sleep(delay) count += 1 print "%s: %s" % ( threadName, time.ctime(time.time()) )# Tao hai thread nhu sau try: thread.start_new_thread( print_time, ("Thread-1", 2, ) ) thread.start_new_thread( print_time, ("Thread-2", 4, ) ) except: print "Error: khong the bat dau thread"while 1: pass
Kết quả là:
Thread-1: Mon Nov 21 15:42:17 2015 Thread-1: Mon Nov 21 15:42:19 2015 Thread-2: Mon Nov 21 15:42:19 2015 Thread-1: Mon Nov 21 15:42:21 2015 Thread-2: Mon Nov 21 15:42:23 2015 Thread-1: Mon Nov 21 15:42:23 2015 Thread-1: Mon Nov 21 15:42:25 2015 Thread-2: Mon Nov 21 15:42:27 2015 Thread-2: Mon Nov 21 15:42:31 2015 Thread-2: Mon Nov 21 15:42:35 2015
Mặc dù thread Module rất hiệu quả với đa luồng tầm thấp nhưng khi so sánh với threading Module thì nó có nhiều điểm hạn chế. Phần tiếp theo giới thiệu về threading Module.
Module mới này được bao với Python 2.4 nhằm cung cấp nhiều hỗ trợ mạnh mẽ và cấp độ cao hơn cho các Thread trong khi so sánh với thread Module ở trên. Ngoài các phương thức có trong thread Module, thì threading Module còn bổ sung thêm một số phương thức khác, đó là:
threading.activeCount(): Trả về số đối tượng thread mà là active.
threading.currentThread(): Trả về số đối tượng thread trong Thread control của Caller.
threading.enumerate(): Trả về một danh sách tất cả đối tượng thread mà hiện tại là active.
Bên cạnh đó, threading Module có lớp Thread để triển khai đa luồng. Lớp này có các phương thức sau:
run(): Là entry point cho một Thread.
start(): Bắt đầu một thread bởi gọi phương thức run().
join([time]): Đợi cho các thread kết thúc.
isAlive(): Kiểm tra xem một thread có đang thực thi hay không.
getName(): Trả về tên của một thread.
setName(): Thiết lập tên của một thread.
» Tin mới nhất:
» Các tin khác: