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
- Khả năng tương tranh của Python
- 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à
- Bạn muốn tìm hiểu nó
- 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
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à
- Thực hiện đồng thời
- Thực hiện song song
- 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
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
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
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ư
- Tận dụng tốt hơn phần cứng máy tính
- Có thể làm được nhiều việc hơn với cùng một hệ thống
- 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ư
- Các giải pháp lập trình đơn giản hơn (e. g. ít mã hơn)
- Nhiều giải pháp đáp ứng hơn
- 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ư
- Thực hiện các tác vụ nền
- Lập kế hoạch nhiệm vụ cho tương lai
- Nhiệm vụ giám sát
- 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?
Đồ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ó
- Cần đồng thời Python. cho công việc của bạn (để được trả tiền)
- 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?
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?
Đ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?
Đồ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