Thời gian là yếu tố quan trọng nhất trong cuộc sống. Do tầm quan trọng của nó, thế giới lập trình cung cấp nhiều thủ thuật và kỹ thuật khác nhau giúp bạn giảm đáng kể thời gian tiêu thụ, từ đó tăng hiệu suất. Một cách tiếp cận như vậy là Đa luồng trong Python
Dưới đây là tóm tắt nhanh về tất cả các chuyên ngành được đề cập trong bài viết này
- Đa nhiệm trong Python là gì?
- một chủ đề là gì?
- Khi nào sử dụng đa luồng trong Python?
- Làm cách nào để đạt được Đa luồng trong Python?
- Làm cách nào để tạo chủ đề trong Python?
- không tạo lớp
- bằng cách mở rộng lớp chủ đề
- không mở rộng lớp chủ đề
6. Ưu điểm của việc sử dụng đa luồng trong Python
Để bắt đầu, trước tiên chúng ta hãy cố gắng hiểu về đa nhiệm trước khi bắt đầu tìm hiểu về Đa luồng trong Python
Đa nhiệm trong Python là gì?Đa nhiệm nói chung là khả năng thực hiện đồng thời nhiều tác vụ. Về mặt kỹ thuật, đa nhiệm đề cập đến khả năng của một hệ điều hành thực hiện các tác vụ khác nhau cùng một lúc. Chẳng hạn, bạn đang tải xuống thứ gì đó trên PC cũng như nghe các bài hát và đồng thời chơi trò chơi, v.v. Tất cả các tác vụ này được thực hiện bởi cùng một hệ điều hành và đồng bộ hóa. Đây không gì khác ngoài đa nhiệm không chỉ giúp bạn tiết kiệm thời gian mà còn tăng năng suất
Có hai loại đa nhiệm trong một hệ điều hành
- dựa trên quy trình
- dựa trên chủ đề
Trong bài viết này, bạn sẽ tìm hiểu về Đa nhiệm dựa trên luồng hoặc Đa luồng
một chủ đề là gì?Một luồng về cơ bản là một luồng thực thi độc lập. Một tiến trình có thể bao gồm nhiều luồng. Mỗi luồng trong một chương trình thực hiện một nhiệm vụ cụ thể. Ví dụ: khi bạn đang chơi trò chơi FIFA trên PC, toàn bộ trò chơi là một quá trình duy nhất, nhưng nó bao gồm một số luồng chịu trách nhiệm phát nhạc, nhận đầu vào từ người dùng, chạy đối thủ một cách đồng bộ, v.v. Tất cả đều là các luồng riêng biệt chịu trách nhiệm thực hiện các tác vụ khác nhau này trong cùng một chương trình
Mỗi quá trình có một luồng luôn chạy. Đây là chủ đề chính. Chủ đề chính này thực sự tạo ra các đối tượng chủ đề con. Luồng con cũng được khởi tạo bởi luồng chính. Tôi sẽ chỉ cho bạn thêm trong bài viết này cách kiểm tra luồng đang chạy hiện tại
Qua đây hy vọng các bạn đã hiểu rõ thread là gì. Tiếp tục, hãy xem Đa luồng trong Python là gì
Khi nào nên sử dụng Đa luồng trong Python?Đa luồng rất hữu ích để tiết kiệm thời gian và cải thiện hiệu suất, nhưng nó không thể áp dụng ở mọi nơi
Trong ví dụ trước về FIFA, chuỗi âm nhạc độc lập với chuỗi nhận đầu vào của bạn và chuỗi lấy đầu vào của bạn độc lập với chuỗi chạy đối thủ của bạn. Các luồng này chạy độc lập vì chúng không phụ thuộc lẫn nhau
Do đó, đa luồng chỉ có thể được sử dụng khi không tồn tại sự phụ thuộc giữa các luồng riêng lẻ
Bài viết này cho thấy thêm cách bạn có thể đạt được Đa luồng trong Python
Làm cách nào để đạt được Đa luồng trong Python?Đa luồng trong Python có thể đạt được bằng cách nhập mô-đun luồng
Trước khi nhập mô-đun này, bạn sẽ phải cài đặt mô-đun này. Để cài đặt cái này trên môi trường anaconda của bạn, hãy thực hiện lệnh sau trên dấu nhắc anaconda của bạn
cài đặt conda -c conda-forge tbb
Sau khi cài đặt thành công, bạn có thể sử dụng bất kỳ lệnh nào sau đây để nhập mô-đun luồng
import threading
from threading import *
Bây giờ bạn đã cài đặt mô-đun luồng, hãy tiếp tục và thực hiện Đa luồng trong Python
Làm cách nào để tạo chủ đề trong Python?Chủ đề trong Python có thể được tạo theo ba cách
- Không tạo lớp
- Bằng cách mở rộng lớp Thread
- Không mở rộng lớp Thread
Không tạo lớp
Đa luồng trong Python cũng có thể được thực hiện mà không cần tạo một lớp. Đây là một ví dụ để chứng minh điều tương tự
Thí dụ
from threading import *
print[current_thread[].getName[]]
def mt[]:
print["Child Thread"]
child=Thread[target=mt]
child.start[]
print["Executing thread name :",current_thread[].getName[]]
đầu ra
MainThread
Child Thread
Executing thread name : MainThread
Đầu ra ở trên cho thấy luồng đầu tiên hiện diện là luồng chính. Sau đó, luồng chính này tạo một luồng con đang thực thi chức năng và sau đó câu lệnh in cuối cùng được thực hiện lại bởi luồng chính
Bây giờ chúng ta hãy tiếp tục và xem cách thực hiện Đa luồng trong python bằng cách mở rộng lớp Thread
Bằng cách mở rộng lớp Thread
Khi một lớp con được tạo bằng cách mở rộng lớp Thread, lớp con biểu thị rằng một luồng mới đang thực hiện một số tác vụ. Khi mở rộng lớp Thread, lớp con chỉ có thể ghi đè hai phương thức i. e. phương thức __init__[] và phương thức run[]. Không có phương pháp nào khác có thể được ghi đè ngoài hai phương pháp này
Đây là một ví dụ về cách mở rộng lớp Thread để tạo một luồng
Thí dụ
import threading
import time
class mythread[threading.Thread]:
def run[self]:
for x in range[7]:
print["Hi from child"]
a = mythread[]
a.start[]
a.join[]
print["Bye from",current_thread[].getName[]]
đầu ra
Hi from child
Hi from child
Hi from child
Hi from child
Hi from child
Hi from child
Hi from child
Bye from MainThread
Ví dụ trên cho thấy lớp myclass đang kế thừa lớp Thread và lớp con i. e myclass đang ghi đè phương thức chạy. Theo mặc định, tham số đầu tiên của bất kỳ hàm lớp nào cần phải là self, là con trỏ tới đối tượng hiện tại. Đầu ra cho thấy luồng con thực thi phương thức run[] và luồng chính chờ quá trình thực thi của luồng con hoàn tất. Cái này là do hàm join[] làm main thread đợi con kết thúc
Phương pháp tạo chủ đề này là phương pháp được ưa thích nhất vì nó là phương pháp tiêu chuẩn. Nhưng trong trường hợp bạn muốn tạo các luồng mà không kế thừa hoặc mở rộng lớp Thread, bạn có thể thực hiện theo cách sau
Không mở rộng lớp Chủ đề
Để tạo một luồng mà không cần mở rộng lớp Thread, bạn có thể làm như sau
Thí dụ
from threading import *
class ex:
def myfunc[self]: #self necessary as first parameter in a class func
for x in range[7]:
print["Child"]
myobj=ex[]
thread1=Thread[target=myobj.myfunc]
thread1.start[]
thread1.join[]
print["done"]
đầu ra
Child
Child
Child
Child
Child
Child
Child
done
Luồng con thực thi myfunc sau đó luồng chính thực thi câu lệnh in cuối cùng
Đa luồng có nhiều ưu điểm, một số ưu điểm như sau
- Sử dụng tốt hơn các nguồn tài nguyên
- Đơn giản hóa mã
- Cho phép xảy ra đồng thời và song song các tác vụ khác nhau
- Giảm tiêu thụ thời gian hoặc thời gian phản hồi, do đó, tăng hiệu suất
Dưới đây là một ví dụ để kiểm tra xem mất bao lâu để mã thực thi có và không có đa luồng trong python
Thí dụ
import time
def sqr[n]:
for x in n:
time.sleep[1]
x%2
def cube[n]:
for x in n:
time.sleep[1]
x%3
n=[1,2,3,4,5,6,7,8]
s=time.time[]
sqr[n]
cube[n]
e=time.time[]
print[e-s]
đầu ra
________số 8_______Trên đây là thời gian đầu ra để thực hiện chương trình mà không sử dụng luồng. Bây giờ chúng ta hãy sử dụng các luồng và xem điều gì xảy ra với cùng một chương trình
Thí dụ
import threading
from threading import *
import time
def sqr[n]:
for x in n:
time.sleep[1]
print['Remainder after dividing by 2',x%2]
def cube[n]:
for x in n:
time.sleep[1]
print['Remainder after dividing by 3',x%3]
n=[1,2,3,4,5,6,7,8]
start=time.time[]
t1=Thread[target=sqr,args=[n,]]
t2=Thread[target=cube,args=[n,]]
t1.start[]
time.sleep[1]
t2.start[]
t1.join[]
t2.join[]
end=time.time[]
print[end-start]
đầu ra
from threading import *
print[current_thread[].getName[]]
def mt[]:
print["Child Thread"]
child=Thread[target=mt]
child.start[]
print["Executing thread name :",current_thread[].getName[]]
0Đầu ra ở trên cho thấy rõ ràng rằng thời gian thực hiện khi chúng ta sử dụng luồng ít hơn nhiều so với thời gian thực hiện cùng một chương trình mà không sử dụng luồng
Tôi hy vọng bạn hiểu rõ các khái niệm được đề cập trong bài viết này liên quan đến Đa luồng trong Python. Đảm bảo thực hành càng nhiều càng tốt vì đây là một trong những khái niệm quan trọng nhất được sử dụng trong lập trình
Nếu bạn muốn xem thêm các bài viết về các công nghệ đang thịnh hành nhất trên thị trường như Trí tuệ nhân tạo, DevOps, Ethical Hacking, thì bạn có thể tham khảo trang web chính thức của Edureka
Hãy tìm các bài viết khác trong loạt bài này sẽ giải thích nhiều khía cạnh khác của Python và Khoa học dữ liệu