Python có tốt cho đồng thời không?

Các tính năng đồng thời và song song đã thay đổi hoàn toàn cục diện của các ứng dụng phần mềm. Xu hướng phổ biến trong các tổ chức lớn hơn là thiết kế một ứng dụng cấp doanh nghiệp đồng thời và song song. Do đó, điều quan trọng là phải hiểu cách thức hoạt động của đồng thời và song song. Mục đích duy nhất của bài viết này là cung cấp một hướng dẫn rõ ràng và ngắn gọn về cách thức và thời điểm sử dụng đồng thời và song song trong Python…

Các hệ thống hiện đại có nhiều lõi CPU. Các chương trình hiện đại cần mở rộng quy mô. Có lẽ bạn đã nghĩ rằng các tập lệnh và chương trình của bạn không sử dụng hết phần cứng của bạn

Có lẽ bạn cần tìm hiểu thêm về Python concurrency

Tôi đã tạo hướng dẫn này cho bạn. Chào mừng

  • Bạn sẽ khám phá Python đồng thời là gì với một chuyến tham quan ngắn
  • Sau đó, bạn sẽ khám phá ra lý do tại sao bạn có thể cần hoặc muốn học Python concurrency
  • Sau đó, cuối cùng bạn sẽ khám phá ra lý do tại sao bạn có thể cần học Python đồng thời và tại sao tất cả các nhà phát triển Python cần học nó (điều này có thể khiến tôi gặp rắc rối)

Hãy đi sâu vào

Mục lục

  • Tại sao nên học Python đồng thời?
  • Đồng thời Python là gì
    • Khả năng tương tranh của Python
      • Thực hiện đồng thời
      • Thực thi song song
      • Thực thi không đồng bộ
    • Lợi ích của đồng thời Python
    • Đồng thời Python trong Thư viện tiêu chuẩn
  • Bạn Cần hoặc Muốn Đồng thời Python
  • Cần đồng thời Python
    • Đáp ứng yêu cầu cho dự án mới
    • Duy trì một dự án hiện tại
  • Muốn đồng thời Python
    • Bạn muốn trở thành một nhà phát triển Python tốt hơn
    • xen vào
    • Bạn muốn có nhiều dự án thú vị hơn
    • Bạn muốn có một công việc mới
  • Tất cả các nhà phát triển Python cần học đồng thời
    • Nhưng Còn Về…
  • Tài nguyên
  • mang đi

Tại sao nên học Python đồng thời?

Câu hỏi đầu tiên cần trả lời là “tại sao”

  • Trước khi bạn chọn một mô-đun hoặc thư viện cho đồng thời
  • Trước khi bạn tìm hiểu API đồng thời hoặc viết mã
  • Trước khi mua một cuốn sách, tham gia một khóa học hoặc đọc lướt các hướng dẫn

Đầu tiên là vì nếu bạn không thể phát triển một câu trả lời chắc chắn, thì bạn có thể tiếp tục. Nó làm cho các câu hỏi khác ít liên quan hơn, có lẽ không liên quan

Có hai lý do chính khiến bạn học Python đồng thời, đó là

  1. Bạn muốn tìm hiểu nó
  2. Bạn cần học nó

Cuối cùng, bạn muốn học Python đồng thời để có được công việc tốt hơn hoặc để đạt được sự hài lòng hơn trong công việc

Cuối cùng, bạn cần học Python đồng thời để giữ công việc của mình và được trả tiền

Có nhiều bước giữa những mong muốn này và kết quả

Sơ đồ dưới đây cố gắng nắm bắt hai cơ sở hợp lý này

Python có tốt cho đồng thời không?
Sơ đồ hiển thị lý do tại sao bạn có thể cần hoặc muốn tìm hiểu đồng thời python từ cấp độ cao

Nếu bạn cần hoặc muốn học Python đồng thời, ít nhất bạn biết mình đang đứng ở đâu. Có thể hữu ích nếu làm rõ nhu cầu này với nhiều chi tiết hơn và tạo động lực để bạn bắt đầu

Vấn đề lớn hơn là hầu hết (tất cả. ) Các nhà phát triển Python cần học Python concurrency và chưa biết sự thật này

Có thể bạn tò mò về các luồng, quy trình và/hoặc coroutine của Python, nhưng bạn không thực sự muốn tìm hiểu về chúng, ít nhất là chưa

Tôi hy vọng rằng hướng dẫn này sẽ giúp thúc đẩy bạn thay đổi suy nghĩ của mình

Nhưng trước khi đi sâu vào những lý do này, chúng ta hãy tìm hiểu sơ qua về Python concurrency chính xác là gì

Đồng thời Python là gì

Đồng thời Python đề cập đến một bộ khả năng được cung cấp bởi các mô-đun Python cụ thể và trong một số trường hợp (các coroutine) chính ngôn ngữ Python

Các khả năng không được cung cấp bởi các phương tiện khác và phải thực hiện với việc thực thi mã đồng thời, không đồng bộ và/hoặc song song

Các khả năng này được triển khai trong các mô-đun Python cụ thể trong thư viện chuẩn, chẳng hạn như các mô-đun “threading“, “multiprocessing“ và “asyncio”

Hãy xem nhanh các khả năng và chi tiết triển khai của Python concurrency trước khi đi sâu vào lý do tại sao chúng ta nên tìm hiểu chúng

Khả năng tương tranh của Python

Đồng thời Python mở khóa các khả năng không được cung cấp bởi các cấu trúc lập trình khác, hoặc ít nhất, không dễ dàng như vậy

Đồng thời đề cập đến một loại lập trình khác. Đó là một mô hình khác trực giao hoặc được phủ lên trên các mô hình lập trình điển hình của chúng ta như lập trình thủ tục, lập trình chức năng hoặc lập trình hướng đối tượng, tất cả chúng ta có thể sử dụng trong Python

Đồng thời, được quan niệm rộng rãi, mang lại ba khả năng mới, đó là

  1. Thực hiện đồng thời
  2. Thực hiện song song
  3. Thực thi không đồng bộ

Chúng khác nhau nhưng có liên quan

Thực hiện đồng thời

Thực thi đồng thời là điều kiện tiên quyết để thực thi song song và không đồng bộ

Đồng thời có nghĩa là các phần của chương trình có thể không theo thứ tự hoặc trùng lặp theo một cách nào đó

Giống như các chức năng cho phép một chương trình dài được chia thành các phần riêng biệt và được sử dụng lại. Một nguyên tử thực thi đồng thời, như lambda, hàm hoặc phương thức, có thể được thực thi tại một số thời điểm có khả năng trùng lặp với một nguyên tử thực thi đồng thời khác

Điều đó không có nghĩa là việc thực hiện “sẽ” không đúng thứ tự hoặc sẽ trùng lặp với nhau, chỉ có nghĩa là nó “có thể”

Ví dụ: chúng tôi có thể đọc đồng thời từ 3 tệp. Có một quy định rằng các nhiệm vụ là riêng biệt và mỗi nhiệm vụ có thể xảy ra vào một thời điểm tùy ý, mặc dù có nhiều cách để đạt được điều này

Các tệp có thể được đọc từng chút một trong vòng tròn cho đến khi hoàn thành. Chúng có thể được đọc song song (thảo luận tiếp theo), chúng có thể được đọc không đồng bộ và người gọi có thể kiểm tra kết quả sau

đồng thời. Khả năng có nhiều hơn một tính toán đang được tiến hành cùng một lúc. Các tính toán này có thể nằm trên các lõi riêng biệt hoặc chúng có thể chia sẻ một lõi duy nhất bằng cách hoán đổi vào và ra bởi hệ điều hành theo các khoảng thời gian

— Trang 266, Nghệ thuật đồng thời, 2009

Thực thi đồng thời tạo điều kiện cho các chi tiết triển khai "đồng thời", giống như các chương trình con tạo điều kiện tái sử dụng. Các chi tiết như ưu tiên đa nhiệm, đa nhiệm hợp tác và thực thi song song

Hãy xem một sơ đồ có thể làm cho việc thực thi đồng thời rõ ràng hơn

Python có tốt cho đồng thời không?
Sơ đồ thể hiện thực thi đồng thời 3 tác vụ

Sơ đồ cho thấy việc thực hiện đồng thời ba tác vụ. Thời gian thực hiện các tác vụ bắt đầu từ đầu biểu đồ và di chuyển xuống dưới, từng bước một

Chúng ta có thể thấy rằng trong trường hợp này, mặc dù cả ba tác vụ đều được thực hiện đồng thời, nhưng thực tế chỉ có một tác vụ được thực thi tại một thời điểm. Tuy nhiên, tất cả họ đều tiến bộ

Thực thi song song

Thực hiện song song có nghĩa là được thực hiện cùng một lúc

Nó có nghĩa là thực hiện đồng thời các nguyên tử thực hiện đồng thời, được mô tả trước đây

Nếu thực thi đồng thời là khả năng, thì thực thi song song là phương tiện

Như vậy, thực thi song song thường là một chức năng của tính song song của phần cứng bên dưới. Điều này có thể có nghĩa là nhiều GPU hoặc CPU, nhiều lõi trên mỗi CPU, nhiều máy, v.v.

Song song, tương đông. Thực hiện nhiều phép tính cùng một lúc. Các tính toán này phải nằm trên các lõi riêng biệt để chạy song song

— Trang 270, Nghệ thuật đồng thời, 2009

Song song thường là ý nghĩa khi mô tả đồng thời python một cách ngẫu nhiên, e. g. rằng chúng tôi muốn mọi thứ xảy ra cùng một lúc

Trong thực tế, tính song song cho phép sử dụng toàn bộ hoặc toàn bộ phần cứng cơ bản. Điều này có nghĩa là chúng tôi có thể chạy trên tất cả các CPU hoặc tất cả các lõi, thay vì một

Nó có thể có nghĩa là một loạt các nhiệm vụ tuần tự có thể được hoàn thành trong khoảng thời gian cần thiết để hoàn thành một nhiệm vụ, mang lại khả năng tăng tốc và lần lượt là khả năng mở rộng của chương trình

Hãy xem một sơ đồ có thể làm cho việc thực thi song song rõ ràng hơn

Python có tốt cho đồng thời không?
Sơ đồ thể hiện Thực thi song song 3 tác vụ

Sơ đồ cho thấy việc thực hiện song song ba tác vụ. Thời gian thực hiện các tác vụ bắt đầu từ đầu biểu đồ và di chuyển xuống dưới, từng bước một

Chúng ta có thể thấy rằng cả ba nhiệm vụ được bắt đầu đồng thời, đồng thời. Trong trường hợp này, chúng ta có thể thấy rằng mỗi tác vụ có thể thực hiện từng bước thời gian, cho phép tất cả các tác vụ thực hiện đồng thời

Thực thi không đồng bộ

Thực thi không đồng bộ có nghĩa là không đồng thời, đ. g. một thời gian sau

Nó có thể song song. Có thể là khi có đủ nguồn lực. Có thể là khi có thời gian. Đó có thể là khi chúng tôi chọn tạm dừng và cho phép nó

không đồng bộ. Các luồng thực thi riêng biệt có thể chạy đồng thời theo bất kỳ thứ tự nào so với nhau là không đồng bộ

— Trang 265, Nghệ thuật đồng thời, 2009

Thực thi không đồng bộ tạo điều kiện cho một phong cách lập trình mới, được gọi là lập trình không đồng bộ

Các nhiệm vụ và lệnh gọi chức năng có thể được gửi đi và kết quả được xử lý sau, theo yêu cầu. Các sự kiện bên ngoài có thể kích hoạt việc thực thi các chức năng theo yêu cầu. Đổi lại, điều này có thể yêu cầu ít tài nguyên hơn và do đó, hỗ trợ nhiều tác vụ đồng thời hơn đáng kể

Cách tiếp cận này là phổ biến nhất khi sử dụng non-blocking I/O

Hãy xem một sơ đồ có thể làm cho việc thực thi không đồng bộ trở nên rõ ràng hơn

Python có tốt cho đồng thời không?
Sơ đồ hiển thị Thực thi không đồng bộ 3 tác vụ

Sơ đồ cho thấy việc thực hiện không đồng bộ ba tác vụ. Thời gian thực hiện các tác vụ bắt đầu từ đầu biểu đồ và di chuyển xuống dưới, từng bước một

Một nhiệm vụ được bắt đầu và sau đó lên lịch cho nhiệm vụ thứ hai. Nhiệm vụ đầu tiên tiếp tục trong giây lát. Nhiệm vụ thứ hai sau đó được tạo cơ hội để thực hiện và lên lịch cho nhiệm vụ thứ ba. Nhiệm vụ thứ ba sau đó chạy và hoàn thành. Nhiệm vụ thứ hai hoàn thành và nhiệm vụ đầu tiên chạy lâu hơn một chút

Tất cả ba tác vụ được thực hiện đồng thời, mặc dù theo cách khác với những gì chúng ta đã thấy trước đây

Lợi ích của đồng thời Python

Các tính năng hoặc khả năng cấp cao hơn của việc thực thi đồng thời, song song và không đồng bộ cho phép các lợi ích cụ thể, chẳng hạn như

  1. Tận dụng tốt hơn phần cứng máy tính
  2. Có thể làm được nhiều việc hơn với cùng một hệ thống
  3. Có thể làm được nhiều việc hơn trong thời gian ít hơn

Khi chúng tôi nghĩ về đồng thời, chúng tôi nghĩ về các kết quả như được liệt kê ở trên

  • Chúng tôi muốn chạy mã Python trên tất cả các lõi CPU
  • Chúng tôi muốn các tác vụ chạy song song, thay vì tuần tự
  • Chúng tôi muốn làm tất cả mọi thứ cùng một lúc càng nhanh càng tốt

Ngoài ra còn có những lợi ích ít hữu hình khác, chẳng hạn như

  1. Các giải pháp lập trình đơn giản hơn (e. g. ít mã hơn)
  2. Nhiều giải pháp đáp ứng hơn
  3. Giải quyết vấn đề mới

Điểm cuối cùng này về việc giải quyết các vấn đề mới là một vấn đề lớn

Ví dụ: đồng thời cho phép các chương trình thực hiện những việc mà chúng không thể đạt được bằng cách khác, ít nhất là không phải nếu không có những nỗ lực đáng kể, chẳng hạn như

  1. Thực hiện các tác vụ nền
  2. Lập kế hoạch nhiệm vụ cho tương lai
  3. Nhiệm vụ giám sát
  4. Nhiệm vụ được kích hoạt

Đây là những lợi ích cấp thấp hơn mà chúng ta có thể bắt đầu sử dụng trực tiếp khi đưa đồng thời vào các dự án lập trình Python của mình

Đây là một chuyến tham quan rất nhanh về các lợi ích của đồng thời Python, đồng thời thực sự nói chung hơn

Sơ đồ dưới đây thực hiện một nỗ lực vụng về trong việc tóm tắt những khả năng và lợi ích hoặc kết quả này. Nó có giúp ích gì không?

Python có tốt cho đồng thời không?
Khả năng và lợi ích của đồng thời Python để giải quyết các vấn đề trong mã

Đồng thời Python trong Thư viện tiêu chuẩn

Đồng thời Python có sẵn trong Python thông qua ba mô-đun chính trong thư viện chuẩn, chúng là

  • mô-đun luồng
  • Mô-đun đa xử lý
  • mô-đun asyncio

Có những mô-đun khác bổ sung cho những mô-đun này, nhưng ba mô-đun này là trung tâm của các khả năng đồng thời của Python

Mô-đun luồng cho phép tạo và quản lý các luồng hệ điều hành bằng cách sử dụng các đối tượng và hàm Python. Các luồng thường được sử dụng cho các tác vụ liên kết với IO như đọc và ghi từ ổ cắm, tệp và thiết bị

Mô-đun đa xử lý cho phép chúng tôi tạo và quản lý các quy trình cấp hệ điều hành. Các quy trình thường được sử dụng cho các tác vụ liên quan đến CPU

Mô-đun asyncio cho phép chúng tôi tạo và quản lý các coroutine cấp phần mềm. Các coroutine được sử dụng chủ yếu cho non-blocking sub process và socket I/O, mặc dù có thể được sử dụng rộng rãi hơn cho lập trình không đồng bộ với các hoạt động liên kết với IO và CPU bằng cách gửi các tác vụ tới các luồng và quy trình

Ngoài ra còn có nhiều thư viện của bên thứ ba thay thế, tăng cường và thêm chức năng trên các mô-đun này

Có lẽ phổ biến nhất và/hoặc được sử dụng rộng rãi (xếp hạng dựa trên số sao GitHub) bao gồm

  • cá đuối. một khuôn khổ để nhân rộng các ứng dụng Python
  • lốc xoáy. Khung web Python và thư viện mạng không đồng bộ
  • rau cần tây. Hàng đợi nhiệm vụ phân tán
  • lành mạnh. Máy chủ và khung web Async Python
  • aiohttp. Khung máy khách/máy chủ HTTP không đồng bộ cho asyncio
  • bóng tối. Tính toán song song với lập lịch tác vụ
  • uvloop. Vòng lặp sự kiện asyncio cực nhanh

Bây giờ chúng ta đã có một số ý tưởng về Python concurrency là gì, hãy xem xét lý do tại sao chúng ta nên tìm hiểu nó

Bạn Cần hoặc Muốn Đồng thời Python

Có một cách dễ dàng để nghĩ về Python đồng thời

Bạn cần phải học nó, hoặc bạn muốn học nó

Tôi sẽ, và sẽ, lập luận rằng tất cả các nhà phát triển Python cần học nó. Có những điều bạn có thể làm với đồng thời Python mà bạn không thể làm hoặc không thể thực hiện dễ dàng nếu không có nó

Tuy nhiên, phân tích “cần” so với “muốn” là một nơi tuyệt vời để bắt đầu

Từ cấp độ cao, bạn cần học Python concurrency hoặc học nó tốt hơn vì công việc của bạn, e. g. mức lương thanh toán các hóa đơn của bạn

Bạn có thể muốn học Python concurrency vì nhiều lý do, mặc dù chủ yếu là để cải thiện sự hài lòng trong công việc của bạn với tư cách là nhà phát triển Python. Con đường này có thể ít rõ ràng hơn trên bề mặt, nhưng chúng tôi sẽ đào sâu vào nó

  1. Cần đồng thời Python. cho công việc của bạn (để được trả tiền)
  2. Muốn đồng thời Python. cải thiện sự hài lòng trong công việc

Tiếp theo, chúng ta sẽ xem xét kỹ hơn từng khía cạnh này

Cần đồng thời Python

Bạn cần học Python concurrency ngay bây giờ vì công việc của bạn

Có lẽ có hai lý do chính đây có thể là trường hợp

  • Bạn đang bắt đầu một dự án mới và đồng thời Python cung cấp khả năng đáp ứng yêu cầu của dự án
  • Bạn đang duy trì một dự án sử dụng đồng thời Python

Trong những trường hợp này, học Python đồng thời không thực sự là một lựa chọn. Đó là một nhu cầu, không phải là một muốn

Bạn phải học nó để làm công việc của bạn, và được trả tiền

Sơ đồ dưới đây thực hiện một nỗ lực vụng về trong việc tóm tắt lập luận này. Nó có giúp ích gì không?

Python có tốt cho đồng thời không?
Sơ đồ hiển thị lý do tại sao bạn có thể CẦN học Python đồng thời

Nếu bạn đang trong trường hợp này, hãy gửi cho tôi một tin nhắn. tôi muốn nghe nhiều hơn

Chúng ta hãy xem xét kỹ hơn từng

Đáp ứng yêu cầu cho dự án mới

Bạn đang bắt đầu hoặc tham gia một dự án Python mới

Đây có thể là phần mềm hoàn toàn mới (greenfield) hoặc bổ sung các chức năng chính cho phần mềm hiện có (brownfield)

Dự án có các yêu cầu và một hoặc nhiều yêu cầu phù hợp với khả năng của đồng thời Python

Ví dụ: có thể đó là khả năng đồng thời Python cấp cao, chẳng hạn như

  • Bạn cần đáp ứng yêu cầu về hiệu suất
  • Bạn cần đáp ứng yêu cầu về khả năng mở rộng
  • Bạn cần đáp ứng yêu cầu về khả năng phản hồi
  • Và như thế

Có lẽ một kỹ sư trưởng hoặc kiến ​​trúc sư đã chọn trước một cách tiếp cận liên quan đến đồng thời

Đây có thể là việc sử dụng các luồng, quy trình hoặc coroutine

Nó có thể là một mô hình lập trình được chọn trước, chẳng hạn như lập trình không đồng bộ, lập trình dựa trên diễn viên, v.v.

Đồng thời Python không nên được thêm vào một dự án, nó nên được thêm vào để đáp ứng yêu cầu của người dùng hoặc bên liên quan cụ thể. Tuy nhiên, đôi khi đây không phải là trường hợp

Tệ hơn nữa, chúng tôi có thể không biết về các yêu cầu cho đến khi phần mềm được viết

Ví dụ

  • Phần mềm quá chậm
  • Phần mềm không tận dụng hết phần cứng
  • Và như thế

Đột nhiên, chúng tôi có một yêu cầu phi chức năng mới chỉ có thể được đáp ứng một cách hợp lý bằng cách sử dụng các phương thức tương tranh

Những lần khác, trưởng dự án hoặc một bên liên quan “chỉ muốn sử dụng nó“. Một yêu cầu ít bảo vệ hơn, nhưng dù sao cũng là một yêu cầu

Đủ công bằng. Tất cả chúng ta đã ở đó. Có lẽ đó là cách chúng tôi học hầu hết các API mà chúng tôi biết. Đó là một cách tuyệt vời để luôn cập nhật, mặc dù nó có thể để lại dấu vết của nợ kỹ thuật

Bất kể lý do là gì, bạn cần học Python concurrency ngay bây giờ bởi vì nếu không có kiến ​​thức về nó, bạn không thể hoàn thành vai trò của mình trong dự án và giữ được công việc của mình

Duy trì một dự án hiện tại

Bạn đang làm việc trên một dự án hiện có

Phần mềm sử dụng đồng thời Python và đã có một thời gian

Ví dụ

  • Có lẽ nó sử dụng các luồng để tải xuống nhiều tệp đồng thời
  • Có lẽ nó sử dụng các quy trình để thực hiện nhiều phép tính song song
  • Có lẽ nó sử dụng coroutines, được phát triển theo phong cách lập trình không đồng bộ

Vai trò của bạn là duy trì phần mềm này

Điều này sẽ liên quan đến nhiều trách nhiệm, chẳng hạn như

  • Gỡ lỗi trong các tác vụ đồng thời
  • Mở rộng khả năng của các nhiệm vụ đồng thời
  • Thêm nhiệm vụ đồng thời mới

Vai trò của bạn có thể mới hoặc không. Bạn có thể đang bắt đầu một vai trò mới với phần mềm sử dụng đồng thời này. Ngoài ra, bạn có thể đã đảm nhiệm vai trò này một thời gian và bạn đã không chạm vào các phần đồng thời của phần mềm

Một trong những tình huống phổ biến hơn khi bảo trì phần mềm là xử lý các yêu cầu phi chức năng, chẳng hạn như

  • Bạn có thể làm cho nó nhanh hơn?
  • Bạn có thể mở rộng nó để sử dụng tất cả các lõi khác không?
  • Bạn có thể mở rộng nó để hỗ trợ nhiều phiên đồng thời hơn không?

Những yêu cầu này có thể có nghĩa là bạn phải mang tính đồng thời Python một lần nữa vào dự án của mình

Bất kể lý do là gì, bạn phải học Python concurrency ngay bây giờ để hoàn thành trách nhiệm bảo trì phần mềm của mình, nếu không, cuối cùng bạn sẽ không thể giữ được công việc của mình

Muốn đồng thời Python

Bạn muốn học Python concurrency

Có thể bạn không thể hiểu chính xác lý do tại sao, nhưng bạn biết đó là điều bạn muốn học

Bạn không cô đơn. Nhiều nhà phát triển đến với Python concurrency từ hướng này

Sau khi nói chuyện với nhiều nhà phát triển và suy nghĩ kỹ về điều đó, tôi nghĩ rằng điều đó phụ thuộc vào “sự hài lòng trong công việc“

Cuối cùng, bạn muốn cảm thấy hài lòng về công việc mình làm và “đồng thời Python” là một bước trên con đường này

Ví dụ

  • Có thể bạn muốn trở thành một nhà phát triển Python giỏi hơn và việc học đồng thời sẽ giúp đạt được mục tiêu này
  • Có thể bạn muốn một công việc mới và có kỹ năng sử dụng đồng thời Python sẽ tốt, hoặc trợ giúp hoặc bắt buộc
  • Có thể bạn muốn làm việc trên các dự án thú vị hơn, nhiều dự án sử dụng hoặc có thể sử dụng đồng thời theo một cách nào đó
  • Có thể bạn muốn được đồng nghiệp tôn trọng với tư cách là một nhà phát triển giỏi và việc có hoặc thể hiện các kỹ năng xử lý đồng thời sẽ giúp ích cho bạn

Có rất nhiều mô liên kết giữa cảm giác hài lòng về công việc của bạn với tư cách là nhà phát triển Python và việc đạt được kỹ năng xử lý đồng thời Python

Sơ đồ dưới đây thực hiện một nỗ lực vụng về trong việc tóm tắt lập luận này. Nó có giúp ích gì không?

Python có tốt cho đồng thời không?
Sơ đồ hiển thị lý do tại sao bạn có thể muốn tìm hiểu Python đồng thời

Điều này mô tả bạn?

Hãy tìm hiểu sâu hơn về vấn đề này

Bạn muốn trở thành một nhà phát triển Python tốt hơn

Trở thành một nhà phát triển tốt hơn là một khái niệm mơ hồ

Nói chung, điều đó có nghĩa là cải thiện kỹ năng trở thành nhà phát triển Python. Một phần rất lớn của điều này là ý tưởng học tập liên tục

Bạn cần học hỏi nhiều hơn và những cách tốt hơn để giải quyết vấn đề

Đồng thời Python mở khóa các khả năng độc đáo và khác biệt để giải quyết vấn đề trong các chương trình Python, chẳng hạn như các chương trình được mô tả ở trên

Học đồng thời sẽ giúp bạn trở thành một lập trình viên Python giỏi hơn

Ví dụ

  • Thay vì viết một tập lệnh để tải xuống từng tệp từ máy chủ web, bạn có thể tải xuống tất cả chúng cùng một lúc
  • Thay vì điều chỉnh và đánh giá từng mô hình một, bạn có thể điều chỉnh và đánh giá nhiều mô hình song song
  • Thay vì đưa ra các truy vấn cơ sở dữ liệu theo trình tự, bạn có thể loại bỏ tất cả chúng cùng một lúc và xử lý phản hồi của chúng sau

Trên thực tế, hầu hết các tài nguyên bên ngoài mà chúng ta tương tác trong các chương trình của mình đều đồng thời một cách tự nhiên. Điều này bao gồm ổ cứng, máy chủ web, máy chủ cơ sở dữ liệu, v.v. Việc viết các chương trình tuần tự để tương tác với các tài nguyên này đang hạn chế tiềm năng của các chương trình đó

Bạn cần học Python đồng thời để trở thành nhà phát triển Python giỏi hơn

xen vào

Tôi đã học lập trình đồng thời ban đầu để trở thành một nhà phát triển tốt hơn

Đó là một mớ hỗn độn và tôi đã viết rất nhiều mã rác. Tuy nhiên, tôi muốn mã nhanh hơn và nhận được nó. Tôi nhớ đã viết một số GUI Java đa luồng để truy vấn nhiều máy chủ trò chơi cùng một lúc và một số khác để tải xuống nhiều tệp HTML từ máy chủ nhanh nhất có thể. Họ đã làm việc và họ đã được đa luồng. Nhưng họ đã không nguyên tắc

Sau đó, tôi đã tham gia một khóa học đại học và học đồng thời một cách có hệ thống (tôi nghĩ là một khóa học ban đêm, như một phần của bằng Thạc sĩ của tôi, nhưng đó là hơn 20 năm trước). Nó được dạy thực tế với các ví dụ mã và rất ít lý thuyết trừu tượng. Xin tri ân giảng viên trẻ cuối những năm 2000

Sau đó, tôi đã học cách sử dụng đồng thời trong bộ ngôn ngữ mà tôi đang sử dụng vào thời điểm đó, đặc biệt là Java, ngôn ngữ tôi đang sử dụng trong công việc hàng ngày của mình

Trong vòng vài tuần, tôi tình cờ tham gia một dự án để lập tài liệu và duy trì một khung công tác đa luồng Java nội bộ tại nơi làm việc

Tôi PHẢI biết đồng thời để đảm nhận vai trò. Tôi thậm chí có thể đã giơ tay cho nó. tôi không nhớ

Mặc dù tôi còn non nớt, nhưng tôi còn trẻ, nhiệt tình và cố gắng tìm ra những lỗi tồn tại lâu dài trong mã như một phần công việc của mình. Tôi tin rằng đã tìm thấy chúng vì thực tế là tôi còn xanh và đã nghiên cứu các quy tắc cũng như các phương pháp hay nhất gần đây

Tôi đoán tôi muốn trở thành một nhà phát triển giỏi hơn để tôi có thể làm việc với nhiều dự án thú vị hơn tại nơi làm việc. Không phải GUI khác, mà là một số hệ thống có thể mở rộng phía sau hoặc phía máy chủ. Một vài thứ thú vị

Và đó là những gì tôi nhận được. Và sau đó, vài

Nền tảng vững chắc về lập trình đồng thời đã phục vụ tôi trong suốt sự nghiệp lập trình của mình, đặc biệt là trong thập kỷ qua khi tôi tập trung vào Python để học máy

Bạn muốn có nhiều dự án thú vị hơn

Sử dụng Python là một niềm vui, nhưng viết chương trình Python là chưa đủ

Chúng tôi muốn làm việc trên các dự án thú vị

Dự án thú vị nhất không chỉ sử dụng đồng thời mà còn yêu cầu nó

Ví dụ

  • Các dự án thú vị có thể sử dụng công nghệ theo xu hướng như máy học
  • Các dự án thú vị có thể phục vụ nhiều khách hàng hoặc người dùng
  • Các dự án thú vị có thể làm nhiều việc cùng một lúc

Ở đây, thú vị có nghĩa là "thú vị về mặt kỹ thuật", trái ngược với một ứng dụng CRUD tiêu chuẩn khác

Làm việc trên các dự án thú vị hơn đòi hỏi phải có kỹ năng và khả năng làm việc trên các dự án đó

Một kỹ năng nền tảng cho các dự án thú vị về mặt kỹ thuật là đồng thời

Đó là một khả năng mà nhiều khả năng khác xây dựng dựa trên

Bạn cần học đồng thời Python để làm việc trên các dự án thú vị hơn

Bạn muốn có một công việc mới

Một tình huống phổ biến hiện nay là các nhà phát triển Python chuyển đi hoặc muốn chuyển sang vai trò mới

Ví dụ

  • Một nhà phát triển web Python chuyển sang vai trò back-end
  • Nhà phát triển ứng dụng Python chuyển sang vai trò phía máy chủ
  • Nhà phát triển Python chuyển sang vai trò học máy hoặc khoa học dữ liệu

Đồng thời Python là một kỹ thuật quan trọng trong các chương trình phụ trợ, phía máy chủ và khoa học dữ liệu

Cái cuối cùng này rất phổ biến do sự phát triển của trí tuệ nhân tạo và máy học trong thập kỷ qua

Lý do là các chương trình chạy trong các môi trường này có các yêu cầu mạnh mẽ về tính kịp thời và khả năng mở rộng. Họ cần phải nhanh và sử dụng hiệu quả phần cứng sẵn có

Đồng thời Python là bắt buộc nếu bạn muốn một công việc mới theo bất kỳ hướng phổ biến nào sau đây

Kiểm tra bất kỳ bảng công việc nào để biết các vai trò của nhà phát triển Python về kỹ thuật, phụ trợ, phía máy chủ và khoa học dữ liệu và việc làm quen với tính tương tranh của Python là một yêu cầu bắt buộc, rõ ràng hoặc ngầm định

Bạn rất có thể cần phải học Python đồng thời để tìm một công việc mới

Bây giờ chúng ta đã xem xét lý do tại sao một số nhà phát triển Python cần và muốn tìm hiểu về tính đồng thời của Python, hãy tiến thêm một bước nữa

Tất cả các nhà phát triển Python cần học đồng thời

Điều này có thể khiến tôi gặp rắc rối

Tôi nghĩ rằng tất cả các nhà phát triển Python cần học đồng thời

Đừng la hét. Hãy để tôi giải thích

  • Không phải điều đầu tiên học được
  • Có lẽ thậm chí không phải điều thứ hai đã học
  • Nhưng sớm thôi

Đồng thời là khả năng hạng nhất dành cho nhà phát triển Python hiện đại

Nó ở trên đó với các khả năng hạng nhất khác như

  • mẫu thiết kế
  • Thuật toán và cấu trúc dữ liệu
  • Lập trình hướng đối tượng

Có vô số khả năng mà một chương trình Python có thể yêu cầu. Sơ đồ bên dưới thực hiện một nỗ lực vụng về trong việc liệt kê chỉ một vài trong số chúng với độ khó tăng dần và cho thấy nơi có thể phù hợp với đồng thời. Nó có giúp ích gì không?

Python có tốt cho đồng thời không?
Sơ đồ về các khả năng của lập trình Python và nơi có thể phù hợp với đồng thời

Đồng thời Python, giống như các khả năng trên, không bắt buộc về mặt kỹ thuật để giải quyết các vấn đề trong Python

Bạn có thể viết mã thủ tục cho mọi thứ với khả năng trừu tượng hóa và tái sử dụng hạn chế, nhưng bạn sẽ để lại nhiều đòn bẩy trên bàn một cách không cần thiết

Điều tương tự cũng áp dụng cho đồng thời Python

Là một lập trình viên, bạn sẽ có quyền truy cập vào các khả năng hỗ trợ đồng thời. Tất cả những khả năng tôi đã liệt kê ở trên trong phần trước. Tóm lại

  • Học cách sử dụng đồng thời sẽ cho phép bạn mở khóa khả năng của các hệ thống hiện đại vận chuyển phổ biến với nhiều lõi CPU

Phương án thay thế là gì?

  • Học cách sử dụng đồng thời có thể làm cho toàn bộ lớp giải quyết vấn đề dễ dàng hơn, chẳng hạn như tác vụ nền, tác vụ được kích hoạt, tác vụ giám sát, v.v.

Sự thay thế là gì?

  • Học cách sử dụng đồng thời sẽ giúp các giải pháp của bạn hiệu quả hơn, chẳng hạn như hoàn thành nhiều nhiệm vụ hơn trong cùng một thời điểm và hoàn thành nhiều việc hơn trong thời gian ngắn hơn

Phương án thay thế là gì?

Biết cách tạo và sử dụng các luồng, quy trình và coroutine phải có trong hộp công cụ của nhà phát triển Python hiện đại

Nó phải là một phần của chương trình đào tạo các nhà phát triển Python

Bạn phải học đồng thời Python

Được rồi, hãy để tôi chạm vào một số phản đối của bạn

Nhưng Còn Về…

Đồng thời rất nguy hiểm.
(thực sự? nhiều hơn là truy cập cơ sở dữ liệu sản xuất?)

Điều kiện cuộc đua và bế tắc.
(có. tất cả mã đều có thể bị lỗi, đây chỉ là những lỗi giới hạn đối với loại lập trình này)

Việc thêm chủ đề khiến mọi thứ trở nên tồi tệ hơn.
(hả. ?

Python không hỗ trợ các luồng thực hoặc đồng thời do GIL.
(hoàn toàn sai)

Tất cả các công cụ trong hộp công cụ của lập trình viên đều có thể nguy hiểm

Tất cả đều cần được đào tạo và thực hành cẩn thận

Đồng thời Python không khác

Ngoài ra, bạn không cần phải đi sâu. Bạn cần tìm hiểu API và cách thức/thời điểm sử dụng nó

Giống như

  • Bạn không cần học lý thuyết tính toán để bắt đầu viết mã
  • Bạn không cần nghiên cứu nội bộ cơ sở dữ liệu để tìm hiểu và sử dụng SQL
  • Bạn không cần nghiên cứu nội bộ của hệ điều hành để đọc/ghi tệp

Tương tự

  • Bạn không cần nghiên cứu hệ điều hành hoặc lý thuyết đồng thời để sử dụng luồng, quy trình và coroutine

Các mẫu, quy tắc và phương pháp hay nhất sẽ đưa bạn đi hết con đường trong hầu hết thời gian, giống như trong những trường hợp khác

Có lẽ tôi đã xác định rằng bạn cần học Python đồng thời, nếu vậy, hãy đảm bảo rằng bạn học nó đúng cách. Có lẽ giống như cách bạn học các kỹ năng lập trình khác của mình

Tài nguyên

Tôi giúp các nhà phát triển Python học đồng thời

Trên thực tế, đó là tất cả những gì tôi làm vào lúc này. Nó giống như sứ mệnh của tôi trong tương lai gần

Bạn có thể đọc hơn 300 hướng dẫn miễn phí về xử lý đồng thời Python được tổ chức thành các lộ trình học tập tại đây

  • Lộ trình học Python đồng thời

Tôi thêm các hướng dẫn mới mọi lúc, mọi ngày vào lúc này

Bạn có thể đọc hướng dẫn khổng lồ (hơn 25.000 từ) miễn phí của tôi về đồng thời Python tại đây

  • Hướng dẫn đồng thời Python

Tôi khuyên bạn nên bắt đầu với

  • Cách chọn API đồng thời Python phù hợp
  • Luồng Python. Hướng dẫn hoàn chỉnh
  • Đa xử lý Python. Hướng dẫn hoàn chỉnh

Tôi hy vọng những tài nguyên miễn phí này sẽ giúp

mang đi

Đồng thời Python đã là một phần của thư viện tiêu chuẩn từ lâu

Chủ đề đã ở đó cho các lứa tuổi. Đa xử lý kể từ Python 2. 3/6. 0, Đồng bộ kể từ 3. 5. Đó là năm 2022 tại thời điểm viết bài và chúng tôi đang đá khoảng 3. 10 và gõ vào 3. 11 sớm

Python có tốt cho đa luồng không?

Python không hỗ trợ đa luồng vì Python trên trình thông dịch Cpython không hỗ trợ thực thi đa lõi thực sự thông qua đa luồng. Tuy nhiên, Python không có thư viện luồng. GIL không ngăn luồng.

Ngôn ngữ nào là tốt nhất cho đồng thời?

Haskell, Clojure và Elixir/Erlang đặc biệt phù hợp với lập trình đồng thời vì chúng có các quy tắc nghiêm ngặt quản lý nơi có thể xảy ra đột biến, khiến việc vô tình tạo ra một sự thay đổi trở nên khó khăn hơn. .

Python xử lý đồng thời như thế nào?

Định nghĩa đồng thời trong từ điển là sự xuất hiện đồng thời. Trong Python, những thứ xảy ra đồng thời được gọi bằng các tên khác nhau (luồng, tác vụ, quy trình) nhưng ở cấp độ cao, chúng đều đề cập đến một chuỗi các lệnh chạy theo thứ tự . . . . . . . . . . . . . . . . . . . . .

Tại sao Python không đồng thời?

Đồng thời dựa trên luồng trong Python bị hạn chế. Chỉ có một luồng duy nhất có thể thực thi tại một thời điểm. Đây là do Khóa phiên dịch toàn cầu hoặc GIL yêu cầu mỗi luồng phải có khóa trên trình thông dịch trước khi thực thi, ngăn tất cả các luồng khác thực thi cùng lúc.