Professional Documents
Culture Documents
Trang 1
Giáo trình Python Cơ Bản
Trang 2
Giáo trình Python Cơ Bản
Python có module time dùng để xử lý các tác vụ liên quan đến thời gian.
Để sử dụng các hàm được xác định trong module, trước tiên hãy import module này vào, thực hiện như
sau: import time
time.time()
Hàm time() trả về số giây tính từ epoch, hay còn gọi là giá trị timestamp. Đối với hệ thống Unix, 00:00:00
ngày 1/1/1970 theo giờ UTC được gọi là epoch (thời điểm bắt đầu thời gian).
time.ctime()
Phương thức này chuyển đổi một time được biểu diễn bằng số giây tính từ epoch thành một biểu diễn
ở dạng chuỗi.
3
Giáo trình Python Cơ Bản
time.sleep()
Hàm sleep() dừng thực thi luồng hiện tại trong số giây truyền vào. Phương thức này không trả về bất cứ giá trị nào
mà chỉ delay trình thực thi. Thử chạy chương trình để thấy rõ khoảng thời gian delay.
time.strftime()
Hàm strftime() trong module time lấy struct_time (hoặc một tuple tương ứng vớis truct_time) làm đối số và trả về một
chuỗi đại diện cho thời gian đó dựa trên code định dạng được truyền vào.
4
Giáo trình Python Cơ Bản
5
Giáo trình Python Cơ Bản
Trang 6
Giáo trình Python Cơ Bản
Bạn dùng máy tính hàng ngày, mở hàng chục trang web khác nhau, cùng
một cơ số đếm không xuể các ứng dụng nghe nhạc, xem phim, game ở
ngoài, bạn có tự hỏi vì sao máy tính có thể cân hết chừng đấy việc một lúc
không?
Dường như các chương trình đều phản ứng chỉ trong tích tắc, và đang
chạy đồng thời cùng nhau.
Nhưng thực tế ảo diệu hơn thế nhiều, hóa ra, trong một đơn vị thời gian
(nanosecond), chỉ có một chương trình (process) được chạy.
Và trong chương trình đó, lại chia ra thành nhiều luồn (thread) con, thực
thi cùng một lúc (multithread, ít nhất là trong thời điểm hiện tại), tạo cho
người dùng cảm giác chương trình đang chạy nhanh hơn.
Nhờ khả năng xử lí các task có thể coi như đồng thời (concurrency),
chương trình có thể đáp ứng tốt với người dùng trong khi đang bận làm
việc khác.
Và đó là chính ý tưởng cơ bản của multithread. 7
Giáo trình Python Cơ Bản
Nói về cấu trúc máy tính : Thread là một đơn vị cơ bản trong CPU. Một luồng sẽ chia
sẻ với các luồng khác trong cùng process về thông tin data, các dữ liệu của
mình. Việc tạo ra thread giúp cho các chương trình có thể chạy được nhiều công việc
cùng một lúc
Process là quá trình hoạt động của một ứng dụng. Tiến trình (process)chứa đựng
thông tin tài nguyên, trạng thái thực hiện của chương trình
Hình bên dưới minh họa sự khác nhau giữa luồng và tiến trình.
9
Giáo trình Python Cơ Bản
10
Giáo trình Python Cơ Bản
3. Đa luồng
(multithreading) là gì ?
Trang 11
Giáo trình Python Cơ Bản
Python cung cấp thread (_thread trong Python 3) 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. yield
12
Giáo trình Python Cơ Bản
Trang 13
Giáo trình Python Cơ Bản
Python 2 là thread
Python 3 là _thread
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] )
Phương thức này cho phép một cách nhanh chóng và hiệu quả để tạo các Thread mới
trong cả Linux và Windows.
Phương thức trả về ngay lập tức và luồng con bắt đầu và gọi function với danh sách
các tham số args đã qua. Khi function trả về, luồng 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 ý
14
Giáo trình Python Cơ Bản
import _thread
import time
15
Giáo trình Python Cơ Bản
Trang 16
Giáo trình Python Cơ Bản
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.
17
Giáo trình Python Cơ Bản
import threading
import time
Starting Thread-1
exitFlag = 0
class myThread (threading.Thread):
Starting Thread-2
def __init__(self, threadID, name, counter): Số lượng threading 3
threading.Thread.__init__(self)
self.threadID = threadID Thread-1 isAlive: True
self.name = name
self.counter = counter Thread-2 isAlive: True
def run(self):
print ("Starting " + self.name) Thread-1: Tue Jun 2 12:06:38 2020
print_time(self.name, self.counter, 5)
print ("Exiting " + self.name)
Thread-2: Tue Jun 2 12:06:39 2020
Thread-1: Tue Jun 2 12:06:39 2020
def print_time(threadName, delay, counter):
while counter: Thread-1: Tue Jun 2 12:06:40 2020
if exitFlag:
threadName.exit() Thread-2: Tue Jun 2 12:06:41 2020
time.sleep(delay)
print ("%s: %s" % (threadName, time.ctime(time.time())))
Thread-1: Tue Jun 2 12:06:41 2020
counter -= 1 Thread-1: Tue Jun 2 12:06:42 2020
# Create new threads Exiting Thread-1
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2) Thread-2: Tue Jun 2 12:06:43 2020
# Start new Threads Thread-2: Tue Jun 2 12:06:45 2020
thread1.start()
thread2.start() Thread-2: Tue Jun 2 12:06:47 2020
print(f"Số lượng threading {threading.activeCount()}")
print(f"Thread-1 isAlive: {thread1.isAlive()}")
Exiting Thread-2
print(f"Thread-2 isAlive: {thread2.isAlive()}") Thread-1 isAlive: False
thread1.join()
thread2.join() Thread-2 isAlive: False
print(f"Thread-1 isAlive: {thread1.isAlive()}")
print(f"Thread-2 isAlive: {thread2.isAlive()}") Exiting Main Thread
print("Exiting Main Thread")
18
Giáo trình Python Cơ Bản
6. Đồng bộ Thread
Trang 19
Giáo trình Python Cơ Bản
Python cung cấp threading Module, mà bao gồm một kỹ thuật locking cho phép bạn
đồng bộ hóa các Thread một cách dễ dàng. Một lock mới được tạo bởi gọi phương
thức Lock().
Phương thức acquire(blocking) của đối tượng lock mới này được sử dụng để ép các
Thread chạy một cách đồng bộ. Tham số blocking tùy ý cho bạn khả năng điều khiển
để xem một Thread có cần đợi để đạt được lock hay không.
Nếu tham số blocking được thiết lập là 0, tức là Thread ngay lập tức trả về một giá trị 0
nếu không thu được lock và trả về giá trị 1 nếu thu được lock. Nếu blocking được thiết
lập là 1, thì Thread cần đợi cho đến khi lock được giải phóng.
Phương thức release() của đối tượng lock được sử dụng để giải phóng lock khi nó
không cần nữa. 20
Giáo trình Python Cơ Bản
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) Starting Thread-1
# Get lock to synchronize threads
threadLock.acquire()
Starting Thread-2
print_time(self.name, self.counter, 3) Thread-1: Tue Jun 2 12:14:03 2020
# Free lock to release next thread
threadLock.release() Thread-1: Tue Jun 2 12:14:04 2020
def print_time(threadName, delay, counter):
while counter:
Thread-1: Tue Jun 2 12:14:05 2020
time.sleep(delay) Thread-2: Tue Jun 2 12:14:07 2020
print ("%s: %s" % (threadName, time.ctime(time.time())))
counter -= 1 Thread-2: Tue Jun 2 12:14:09 2020
threadLock = threading.Lock()
threads = []
Thread-2: Tue Jun 2 12:14:11 2020
# Create new threads Exiting Main Thread
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")
21
Giáo trình Python Cơ Bản
7. Độ ưu tiên Thread
Trang 22
Giáo trình Python Cơ Bản
Queue Module cho phép bạn tạo một đối tượng queue mới mà có thể giữ một số
lượng item nào đó. Dưới đây là các phương thức:
get(): Xóa và trả về một item từ queue.
put(): Thêm một item tới một queue.
qsize() : Trả về số item mà hiện tại đang trong queue.
empty(): Trả về true nếu queue là trống, nếu không thì trả về false.
full(): Trả về true nếu queue là đầy, nếu không thì trả về false.
23
Giáo trình Python Cơ Bản
Hey!
Coding
is easy!
END
Trang 24