Mutithreading trong Python là gì và làm thế nào để đạt được nó?



Tìm hiểu đa nhiệm trong python là gì. Nó cũng giải thích đa luồng cách tạo luồng mà không cần tạo lớp, bằng cách mở rộng lớp Luồng và không mở rộng nó.

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ụ, do đó tăng hiệu suất. Một trong những cách tiếp cận như vậy là Đa luồng trong Python, đây là một trong những khái niệm quan trọng nhất được đề cập trong .

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:





học ssis từng bước

Những gì là đa nhiệm bằng Python?
Chủ đề là gì?
Đa luồng trong python là gì?
Khi nào sử dụng đa luồng trong Python?
Làm thế nào để đạt được Đa luồng trong Python?
Làm thế nào để tạo chủ đề trong Python?

Ư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 đ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ì?

Nói chung, đa nhiệm là khả năng thực hiện nhiều tác vụ đồng thời. Theo thuật ngữ 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. Ví dụ , 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 đồng bộ. Điều này không có 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 chuỗi

Trong bài viết này, bạn sẽ học về Dựa trên chuỗi đa nhiệm hoặc Đa luồng .

Chủ đề là gì?

luồng-đa luồng trong python-edurekaMột chủ đề về cơ bản là một độc lập luồng thực hiện. Một quy 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 một trò chơi, chẳng hạn như 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, lấy dữ liệu đầu vào từ người dùng, chạy đồng bộ đối thủ, 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 tiến trình đều có một luồng luôn chạy. Đây là chủ đề chính. Luồng chính này thực sự tạo ra các đối tượng luồng con. Luồng con cũng được bắt đầu bởi luồng chính. Tôi sẽ chỉ cho bạn tất cả trong bài viết này cách kiểm tra luồng đang chạy hiện tại.

Như vậy với đây, hy vọng các bạn đã hiểu rõ ràng thread là gì. Tiếp tục, hãy xem Đa luồng trong Python là gì.

Khi nào 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ể được áp dụng ở mọi nơi.
Trong ví dụ trước của 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 nhận đầ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 biết thêm về cách bạn có thể đạt được Đa luồng trong Python.

Làm thế nào để đạt được Đa luồng trong Python?

Đa luồng trong Python có thể đạt được bằng cách nhập xâu chuỗi mô-đun.

Trước khi nhập mô-đun này, bạn sẽ phải cài đặt mô-đun này. Để cài đặt điều 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:

conda install -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:

nhập luồng từ nhập luồng *

Bây giờ bạn đã cài đặt mô-đun luồng, chúng ta hãy tiếp tục và thực hiện Đa luồng trong Python.

Làm thế nào để tạo chủ đề trong Python?


Các chủ đề trong Python có thể được tạo theo ba cách:

  1. Không cần tạo lớp học
  2. Bằng cách mở rộng lớp Thread
  3. Không cần mở rộng lớp Thread

Không cần tạo lớp học

Đa luồng trong Python 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 ('Con Thread') child = Thread (target = mt) child.start () print ('Đang thực thi tên luồng:', current_thread ( ) .getName ())

Đầu ra:

Chủ đề con MainThread Tên chủ đề thực thi: MainThread

Kết quả 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 sẽ tạo ra 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 thi 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, tức là phương thức __init __ () và phương thức run (). Không thể ghi đè phương pháp nào khác ngoài hai phương thức 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ụ:

nhập luồng thời gian nhập lớp mythread (luồng.Thread): def run (self): for x in range (7): print ('Hi from child') a = mythread () a.start () a.join () print ('Tạm biệt', current_thread (). GetName ())

Đầu ra:
Chào từ con
Chào từ con
Chào từ con
Chào từ con
Chào từ con
Chào từ con
Chào từ con
Tạm biệt từ MainThread

Ví dụ trên cho thấy rằng lớp myclass đang kế thừa lớp Thread và lớp con tức là lớp con đang ghi đè phương thức run. 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à tham số chính là con trỏ đến đối tượng hiện tại. Kết quả đầ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 các luồng con hoàn tất. Điều này là do hàm join (), làm cho luồng chính đợi con kết thúc.

Phương pháp tạo luồng 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 luồng mà không kế thừa hoặc mở rộng lớp Luồng, bạn có thể thực hiện theo cách sau.

Không có lớp chuỗi mở rộng

Để tạo một luồng mà không cần mở rộng lớp Luồng, bạn có thể làm như sau:
Thí dụ:

from threading import * class ex: def myfunc (self): #self cần thiết làm tham số đầu tiên trong một lớp func cho x trong phạm vi (7): print ('Con') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('done')

Đầu ra:

Đứa trẻ
Đứa trẻ
Đứa trẻ
Đứa trẻ
Đứa trẻ
Đứa trẻ
Đứa trẻ
làm xong

Luồng con thực thi myfunc sau đó luồng chính thực hiện câu lệnh in cuối cùng.

Ưu điểm của việc sử dụng luồng

Đa luồng có nhiều ưu điểm như sau:

  • Sử dụng tài nguyên tốt hơn
  • Đơn giản hóa mã
  • Cho phép thực hiện đồng thời và song song các tác vụ khác nhau
  • Giảm thời gian tiêu thụ hoặc thời gian phản hồi, do đó, tăng hiệu suất.

Đâ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 (es)

Đầu ra:

16.042309284210205

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 chuỗi và xem điều gì sẽ xảy ra với cùng một chương trình:

Thí dụ:

nhập luồng từ nhập luồng * nhập thời gian def sqr (n): for x in n: time.sleep (1) print ('Phần còn lại sau khi chia cho 2', x% 2) def cube (n): for x in n: time.sleep (1) print ('Phần còn lại sau khi chia cho 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: 9.040220737457275

Kết quả 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 thi cùng một chương trình mà không sử dụng luồng.

Tôi hy vọng bạn đã 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.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog “Đa luồng trong Python” và chúng tôi sẽ liên hệ lại với bạn càng sớm càng tốt.

biến thể hiện trong java là gì

Để có kiến ​​thức chuyên sâu về Python cùng với các ứng dụng khác nhau của nó, bạn có thể đăng ký tham gia trực tiếp với hỗ trợ 24/7 và truy cập trọn đời.