SlideShare a Scribd company logo
1 of 33
Download to read offline
Thread
Th.S Trần Đức Lợi
Pythonvietnam.info
Ôn tập bài cũ
• Ôn lại nội dung đã học về Cơ Sở Dữ Liệu
• Chữa bài Làm việc với redis
PythonBeginnerClass @loitd
#pythonvietnam.info
Mục đích bài học
• Tìm hiểu về đa luồng và xử lý đa luồng trong
python
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread
• Process và thread đối với hệ điều hành
• Tại sao cần phải xử lý đa luồng
– GUI
– Browser Tabs
– Server
PythonBeginnerClass @loitd
#pythonvietnam.info
Process
• Process là gì?
• Một process có thể có nhiều threads
• Các process thông thường không sử dụng
chung tài nguyên
• Thread được coi là một lightweight process
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread
PythonBeginnerClass @loitd
#pythonvietnam.info
Process1
• Mainthread
• Thread1
• Thread2
Process1
• Mainthread
• Thread1
Process1
• Mainthread
Bổ trợ: Logging
• Giúp debug và làm tường minh thông tin
trong chương trình.
• Cú pháp:
– import logging
– logging.basicConfig(format='[%(levelname)s]:[%(t
hreadName)-10s]:%(message)s',
level=logging.DEBUG)
– logging.info("Init completed.")
PythonBeginnerClass @loitd
#pythonvietnam.info
Tạo một thread mới
• Cú pháp:
• import threading
• t1 = threading.Thread(name="Thread 1",
target=Hello, args=("thread 1",))
• t1.start()
PythonBeginnerClass @loitd
#pythonvietnam.info
Tạo một thread mới
• Truyền tham số từ main thread vào hàm thực
thi của thread bằng args
• Khởi động thread bằng lệnh start()
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Current Thread
• Dùng lệnh:
– Threading.currentThread().getName()
• Thực thi và kiểm tra số thread được tạo trên
hệ điều hành
• Windows: Process Explorer
• https://technet.microsoft.com/en-
us/sysinternals/bb896653.aspx
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread
PythonBeginnerClass @loitd
#pythonvietnam.info
Non-daemon thread
• Mặc định khi tạo thread mới
• Khi mainthread sẽ đợi cho đến khi tất cả các
thread con hoàn thành xong mới thoát
• Chương trình thoát hoàn toàn
• Cú pháp:
– t1.setDaemon(True)
PythonBeginnerClass @loitd
#pythonvietnam.info
Daemon Thread
• Phải set tường minh
• Người dùng phải tự kiểm soát thread dạng
này
• Chương trình chính có thể tự thoát khi hoàn
thành mà không phụ thuộc vào daemon
thread
• Cú pháp:
– t2.setDaemon(False)
PythonBeginnerClass @loitd
#pythonvietnam.info
Ví dụ
• Ví dụ về cách sử dụng Daemon và Non-
Daemon Thread
PythonBeginnerClass @loitd
#pythonvietnam.info
Bài tập
• Viết chương trình push-pop redis dưới dạng
thread
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Join()
• Để giúp chỉ tường minh main thread phải đợi
daemon thread hoàn thành xong mới được
thoát
• Cú pháp:
– Daemonthr.start()
– Daemonthr.join()
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: join()
• Mặc định join() sẽ block main thread mãi mãi
đến khi daemon thread hoàn thành
• Set thêm tham số timeout để chỉ thời gian
join() hết hiệu lực
• Cú pháp: d.join(seconds)
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Đồng bộ threads
• Giao tiếp thông qua đối tượng Event theo cơ
chế: một thread sẽ đưa ra tín hiệu và các
thread khác đợi tín hiệu
• Số lượng thread đợi 1 tín hiệu là không giới
hạn
• Khai báo event:
– event = threading.Event()
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Đồng bộ threads
• Set() hoặc clear() một event
• Các thread sẽ đợi cho đến khi event được set
để thực hiện hoặc khi hết timeout của lệnh
wait(timeoutseconds)
• Kiểm tra xem Event đã được set chưa:
– isSet() hoặc is_set()
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Đồng bộ threads
• Giới thiệu chương trình ví dụ về đồng bộ giữa
các thread với Events
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Đồng bộ threads
• So sánh thực thi các thread khi wait có
timeout và không có timeout
• Event không phải là phương thức đồng bộ duy
nhất giữa các threads (Condition)
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Đồng bộ threads
• Bài tập:
– Thực hiện một chương trình đọc các giá trị từ
Redis và DB MySQL. Chỉ thực hiện đọc từ DB
MySQL nếu như đọc trên redis không có giá trị trả
về. Thời gian chờ là 30s.
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Quản lý tài nguyên
• Vấn đề khi làm việc đa luồng là quản lý truy
nhập tài nguyên
• Có nhiều hơn 1 thread cùng muốn truy cập,
sửa đổi một biến, tài nguyên, … dùng chung
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Quản lý tài nguyên
Thread
Lock
SemaphoreRLock
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Quản lý tài nguyên
• Cơ chế Lock
– Tại một thời điểm một lock chỉ có thể được sở
hữu bởi nhiều nhất là 1 thread
– Nếu một thread cố gằng sở hữu lock đang bị
chiếm bởi 1 thread khác thì thread đó sẽ phải đợi
cho đến khi lock được giải phóng
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Quản lý tài nguyên
• .acquire() để chiếm lock
• .release() để giải phóng lock
• Hoặc sử dụng with lock:
• .acquire(False) để cố gắng chiếm lock nhưng
sẽ trả về fail nếu như lock đã bị chiếm và do
đó dùng để kiểm tra
• .locked() để kiểm tra lock đã bị chiếm chưa
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Quản lý tài nguyên
• Vấn đề phát sinh:
– Không quan tâm thread nào đang chiếm lock ngay
kể cả thread hiện thời mà lock
• Ý tưởng:
– Rlock (re-entrant locks) : chỉ chặn việc lấy lock đối
với các thread khác thread hiện thời đang cầm
lock
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Quản lý tài nguyên
• lock = threading.Lock()
• lock.acquire()
• lock.acquire() # this will block
• lock = threading.RLock()
• lock.acquire()
• lock.acquire() # this won't block
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Semaphore
• Là cơ chế cao cấp hơn Lock
• Cho phép một số lượng thread nhất định có
thể giữ semaphore
• Nếu vượt quá sẽ block, không cho giữ
semaphore
• Biến đếm sẽ giảm dần sau mỗi lần semaphore
bị chiếm giữ và tăng dần nếu ngược lại
• Nếu biến đếm bằng 0 -> semaphore sẽ bị
block
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Semaphore
• Semaphore được dùng để hạn chế truy nhập
đến tài nguyên
• Giá trị mặc định là 1 connection
PythonBeginnerClass @loitd
#pythonvietnam.info
Thread: Semaphore
• semaphore = threading.BoundedSemaphore()
• semaphore.acquire() # decrements the
counter
• ... access the shared resource
• semaphore.release() # increments the counter
PythonBeginnerClass @loitd
#pythonvietnam.info
Tổng kết bài học
• Định nghĩa, cú pháp thread, process
• Daemon vs Non-Daemon thread
• Đồng bộ giữa các thread với Event
• Quản lý tài nguyên dùng chung
PythonBeginnerClass @loitd
#pythonvietnam.info
Bài tập
• Viết lại chương trình pubsub với thread
PythonBeginnerClass @loitd
#pythonvietnam.info

More Related Content

What's hot (9)

Python Beginner Class day-15-networking
Python Beginner Class day-15-networkingPython Beginner Class day-15-networking
Python Beginner Class day-15-networking
 
Oop unit 11 input và output
Oop unit 11 input và outputOop unit 11 input và output
Oop unit 11 input và output
 
Oop unit 10 ngoại lệ
Oop unit 10 ngoại lệOop unit 10 ngoại lệ
Oop unit 10 ngoại lệ
 
ỨNG DỤNG NGÔN NGỮ R TRONG PHÂN TÍCH DỮ LIỆU.pdf
ỨNG DỤNG NGÔN NGỮ R TRONG PHÂN TÍCH DỮ LIỆU.pdfỨNG DỤNG NGÔN NGỮ R TRONG PHÂN TÍCH DỮ LIỆU.pdf
ỨNG DỤNG NGÔN NGỮ R TRONG PHÂN TÍCH DỮ LIỆU.pdf
 
Oop unit 02 java cơ bản
Oop unit 02 java cơ bảnOop unit 02 java cơ bản
Oop unit 02 java cơ bản
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
 
Oop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnOop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiện
 
Oop unit 08 đa hình
Oop unit 08 đa hìnhOop unit 08 đa hình
Oop unit 08 đa hình
 
7 stl c++
7   stl c++7   stl c++
7 stl c++
 

Similar to Python Beginner Class day-14-thread

Bai10 he thong bao ve bao mat
Bai10   he thong bao ve bao matBai10   he thong bao ve bao mat
Bai10 he thong bao ve bao mat
Vũ Sang
 
Slide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdfSlide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdf
HuyVnh4
 
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớnCode Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Nhật Nguyễn Khắc
 
Hadoop trong triển khai Big Data
Hadoop trong triển khai Big DataHadoop trong triển khai Big Data
Hadoop trong triển khai Big Data
Nguyễn Duy Nhân
 

Similar to Python Beginner Class day-14-thread (16)

Clean code
Clean codeClean code
Clean code
 
Bai10 he thong bao ve bao mat
Bai10   he thong bao ve bao matBai10   he thong bao ve bao mat
Bai10 he thong bao ve bao mat
 
Slide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdfSlide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdf
 
Domain Driven Design và Event Driven Architecture
Domain Driven Design và Event Driven Architecture Domain Driven Design và Event Driven Architecture
Domain Driven Design và Event Driven Architecture
 
How to write good code
How to write good code How to write good code
How to write good code
 
Process and thread
Process and threadProcess and thread
Process and thread
 
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớnCode Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
 
Lesson 21: Video
Lesson 21: VideoLesson 21: Video
Lesson 21: Video
 
Quản lý mã nguồn với GIT
Quản lý mã nguồn với GITQuản lý mã nguồn với GIT
Quản lý mã nguồn với GIT
 
Làm thế nào để học linux trong 24h?
Làm thế nào để học linux trong 24h?Làm thế nào để học linux trong 24h?
Làm thế nào để học linux trong 24h?
 
Hadoop
HadoopHadoop
Hadoop
 
Hadoop trong triển khai Big Data
Hadoop trong triển khai Big DataHadoop trong triển khai Big Data
Hadoop trong triển khai Big Data
 
Oop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớpOop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớp
 
Lập trình Python GUI vs PySide
Lập trình Python GUI vs PySideLập trình Python GUI vs PySide
Lập trình Python GUI vs PySide
 
ITEC - Qua trinh phat trien he thong BigData
ITEC - Qua trinh phat trien he thong BigDataITEC - Qua trinh phat trien he thong BigData
ITEC - Qua trinh phat trien he thong BigData
 
JavaEE Basic_Chapter1: Introduce JavaEE
JavaEE Basic_Chapter1: Introduce JavaEEJavaEE Basic_Chapter1: Introduce JavaEE
JavaEE Basic_Chapter1: Introduce JavaEE
 

Recently uploaded

C.pptx. Phát hiện biên ảnh trong xử lý ảnh
C.pptx. Phát hiện biên ảnh trong xử lý ảnhC.pptx. Phát hiện biên ảnh trong xử lý ảnh
C.pptx. Phát hiện biên ảnh trong xử lý ảnh
BookoTime
 
bài tập lớn môn kiến trúc máy tính và hệ điều hành
bài tập lớn môn kiến trúc máy tính và hệ điều hànhbài tập lớn môn kiến trúc máy tính và hệ điều hành
bài tập lớn môn kiến trúc máy tính và hệ điều hành
dangdinhkien2k4
 
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
ltbdieu
 
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoiC6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
dnghia2002
 

Recently uploaded (20)

Đề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
Đề thi tin học HK2 lớp 3 Chân Trời Sáng TạoĐề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
Đề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
 
C.pptx. Phát hiện biên ảnh trong xử lý ảnh
C.pptx. Phát hiện biên ảnh trong xử lý ảnhC.pptx. Phát hiện biên ảnh trong xử lý ảnh
C.pptx. Phát hiện biên ảnh trong xử lý ảnh
 
Trích dẫn theo Harvard với Microsoft Word
Trích dẫn theo Harvard với Microsoft WordTrích dẫn theo Harvard với Microsoft Word
Trích dẫn theo Harvard với Microsoft Word
 
bài tập lớn môn kiến trúc máy tính và hệ điều hành
bài tập lớn môn kiến trúc máy tính và hệ điều hànhbài tập lớn môn kiến trúc máy tính và hệ điều hành
bài tập lớn môn kiến trúc máy tính và hệ điều hành
 
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT TIẾNG ANH 2024 - TỪ CÁC TRƯỜNG, ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT TIẾNG ANH 2024 - TỪ CÁC TRƯỜNG, ...TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT TIẾNG ANH 2024 - TỪ CÁC TRƯỜNG, ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT TIẾNG ANH 2024 - TỪ CÁC TRƯỜNG, ...
 
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 11 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 11 - CÁN...ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 11 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 11 - CÁN...
 
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdfxemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
 
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
 
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vnGiới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
TIỂU LUẬN MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC
TIỂU LUẬN MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌCTIỂU LUẬN MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC
TIỂU LUẬN MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC
 
Bài học phòng cháy chữa cháy - PCCC tại tòa nhà
Bài học phòng cháy chữa cháy - PCCC tại tòa nhàBài học phòng cháy chữa cháy - PCCC tại tòa nhà
Bài học phòng cháy chữa cháy - PCCC tại tòa nhà
 
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hộiTrắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
 
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdfxemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
 
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
 
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
 
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoiC6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
 
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
 

Python Beginner Class day-14-thread

  • 1. Thread Th.S Trần Đức Lợi Pythonvietnam.info
  • 2. Ôn tập bài cũ • Ôn lại nội dung đã học về Cơ Sở Dữ Liệu • Chữa bài Làm việc với redis PythonBeginnerClass @loitd #pythonvietnam.info
  • 3. Mục đích bài học • Tìm hiểu về đa luồng và xử lý đa luồng trong python PythonBeginnerClass @loitd #pythonvietnam.info
  • 4. Thread • Process và thread đối với hệ điều hành • Tại sao cần phải xử lý đa luồng – GUI – Browser Tabs – Server PythonBeginnerClass @loitd #pythonvietnam.info
  • 5. Process • Process là gì? • Một process có thể có nhiều threads • Các process thông thường không sử dụng chung tài nguyên • Thread được coi là một lightweight process PythonBeginnerClass @loitd #pythonvietnam.info
  • 6. Thread PythonBeginnerClass @loitd #pythonvietnam.info Process1 • Mainthread • Thread1 • Thread2 Process1 • Mainthread • Thread1 Process1 • Mainthread
  • 7. Bổ trợ: Logging • Giúp debug và làm tường minh thông tin trong chương trình. • Cú pháp: – import logging – logging.basicConfig(format='[%(levelname)s]:[%(t hreadName)-10s]:%(message)s', level=logging.DEBUG) – logging.info("Init completed.") PythonBeginnerClass @loitd #pythonvietnam.info
  • 8. Tạo một thread mới • Cú pháp: • import threading • t1 = threading.Thread(name="Thread 1", target=Hello, args=("thread 1",)) • t1.start() PythonBeginnerClass @loitd #pythonvietnam.info
  • 9. Tạo một thread mới • Truyền tham số từ main thread vào hàm thực thi của thread bằng args • Khởi động thread bằng lệnh start() PythonBeginnerClass @loitd #pythonvietnam.info
  • 10. Thread: Current Thread • Dùng lệnh: – Threading.currentThread().getName() • Thực thi và kiểm tra số thread được tạo trên hệ điều hành • Windows: Process Explorer • https://technet.microsoft.com/en- us/sysinternals/bb896653.aspx PythonBeginnerClass @loitd #pythonvietnam.info
  • 12. Non-daemon thread • Mặc định khi tạo thread mới • Khi mainthread sẽ đợi cho đến khi tất cả các thread con hoàn thành xong mới thoát • Chương trình thoát hoàn toàn • Cú pháp: – t1.setDaemon(True) PythonBeginnerClass @loitd #pythonvietnam.info
  • 13. Daemon Thread • Phải set tường minh • Người dùng phải tự kiểm soát thread dạng này • Chương trình chính có thể tự thoát khi hoàn thành mà không phụ thuộc vào daemon thread • Cú pháp: – t2.setDaemon(False) PythonBeginnerClass @loitd #pythonvietnam.info
  • 14. Ví dụ • Ví dụ về cách sử dụng Daemon và Non- Daemon Thread PythonBeginnerClass @loitd #pythonvietnam.info
  • 15. Bài tập • Viết chương trình push-pop redis dưới dạng thread PythonBeginnerClass @loitd #pythonvietnam.info
  • 16. Thread: Join() • Để giúp chỉ tường minh main thread phải đợi daemon thread hoàn thành xong mới được thoát • Cú pháp: – Daemonthr.start() – Daemonthr.join() PythonBeginnerClass @loitd #pythonvietnam.info
  • 17. Thread: join() • Mặc định join() sẽ block main thread mãi mãi đến khi daemon thread hoàn thành • Set thêm tham số timeout để chỉ thời gian join() hết hiệu lực • Cú pháp: d.join(seconds) PythonBeginnerClass @loitd #pythonvietnam.info
  • 18. Thread: Đồng bộ threads • Giao tiếp thông qua đối tượng Event theo cơ chế: một thread sẽ đưa ra tín hiệu và các thread khác đợi tín hiệu • Số lượng thread đợi 1 tín hiệu là không giới hạn • Khai báo event: – event = threading.Event() PythonBeginnerClass @loitd #pythonvietnam.info
  • 19. Thread: Đồng bộ threads • Set() hoặc clear() một event • Các thread sẽ đợi cho đến khi event được set để thực hiện hoặc khi hết timeout của lệnh wait(timeoutseconds) • Kiểm tra xem Event đã được set chưa: – isSet() hoặc is_set() PythonBeginnerClass @loitd #pythonvietnam.info
  • 20. Thread: Đồng bộ threads • Giới thiệu chương trình ví dụ về đồng bộ giữa các thread với Events PythonBeginnerClass @loitd #pythonvietnam.info
  • 21. Thread: Đồng bộ threads • So sánh thực thi các thread khi wait có timeout và không có timeout • Event không phải là phương thức đồng bộ duy nhất giữa các threads (Condition) PythonBeginnerClass @loitd #pythonvietnam.info
  • 22. Thread: Đồng bộ threads • Bài tập: – Thực hiện một chương trình đọc các giá trị từ Redis và DB MySQL. Chỉ thực hiện đọc từ DB MySQL nếu như đọc trên redis không có giá trị trả về. Thời gian chờ là 30s. PythonBeginnerClass @loitd #pythonvietnam.info
  • 23. Thread: Quản lý tài nguyên • Vấn đề khi làm việc đa luồng là quản lý truy nhập tài nguyên • Có nhiều hơn 1 thread cùng muốn truy cập, sửa đổi một biến, tài nguyên, … dùng chung PythonBeginnerClass @loitd #pythonvietnam.info
  • 24. Thread: Quản lý tài nguyên Thread Lock SemaphoreRLock PythonBeginnerClass @loitd #pythonvietnam.info
  • 25. Thread: Quản lý tài nguyên • Cơ chế Lock – Tại một thời điểm một lock chỉ có thể được sở hữu bởi nhiều nhất là 1 thread – Nếu một thread cố gằng sở hữu lock đang bị chiếm bởi 1 thread khác thì thread đó sẽ phải đợi cho đến khi lock được giải phóng PythonBeginnerClass @loitd #pythonvietnam.info
  • 26. Thread: Quản lý tài nguyên • .acquire() để chiếm lock • .release() để giải phóng lock • Hoặc sử dụng with lock: • .acquire(False) để cố gắng chiếm lock nhưng sẽ trả về fail nếu như lock đã bị chiếm và do đó dùng để kiểm tra • .locked() để kiểm tra lock đã bị chiếm chưa PythonBeginnerClass @loitd #pythonvietnam.info
  • 27. Thread: Quản lý tài nguyên • Vấn đề phát sinh: – Không quan tâm thread nào đang chiếm lock ngay kể cả thread hiện thời mà lock • Ý tưởng: – Rlock (re-entrant locks) : chỉ chặn việc lấy lock đối với các thread khác thread hiện thời đang cầm lock PythonBeginnerClass @loitd #pythonvietnam.info
  • 28. Thread: Quản lý tài nguyên • lock = threading.Lock() • lock.acquire() • lock.acquire() # this will block • lock = threading.RLock() • lock.acquire() • lock.acquire() # this won't block PythonBeginnerClass @loitd #pythonvietnam.info
  • 29. Thread: Semaphore • Là cơ chế cao cấp hơn Lock • Cho phép một số lượng thread nhất định có thể giữ semaphore • Nếu vượt quá sẽ block, không cho giữ semaphore • Biến đếm sẽ giảm dần sau mỗi lần semaphore bị chiếm giữ và tăng dần nếu ngược lại • Nếu biến đếm bằng 0 -> semaphore sẽ bị block PythonBeginnerClass @loitd #pythonvietnam.info
  • 30. Thread: Semaphore • Semaphore được dùng để hạn chế truy nhập đến tài nguyên • Giá trị mặc định là 1 connection PythonBeginnerClass @loitd #pythonvietnam.info
  • 31. Thread: Semaphore • semaphore = threading.BoundedSemaphore() • semaphore.acquire() # decrements the counter • ... access the shared resource • semaphore.release() # increments the counter PythonBeginnerClass @loitd #pythonvietnam.info
  • 32. Tổng kết bài học • Định nghĩa, cú pháp thread, process • Daemon vs Non-Daemon thread • Đồng bộ giữa các thread với Event • Quản lý tài nguyên dùng chung PythonBeginnerClass @loitd #pythonvietnam.info
  • 33. Bài tập • Viết lại chương trình pubsub với thread PythonBeginnerClass @loitd #pythonvietnam.info