Top 5 khung web không đồng bộ hàng đầu cho Python

Lập trình không đồng bộ là một công dân hạng nhất trong Python. Nếu bạn là một nhà phát triển web, có những khung tuyệt vời mà bạn có thể chọn từ!


Khi viết, không đồng bộ không chỉ là một từ thông dụng trong cộng đồng Python. Với việc phát hành asyncio thư viện trong phiên bản 3.5, Python thừa nhận tác động của Node.js đối với sự phát triển web và giới thiệu hai từ khóa mới vào ngôn ngữ – async và đang chờ. Đây là một vấn đề rất lớn vì ngôn ngữ Python cực kỳ thận trọng trong việc mở rộng cú pháp cốt lõi trừ khi có nhu cầu cấp bách, điều này chỉ cho thấy các nhà phát triển Python quan trọng như thế nào về các khả năng không đồng bộ.

Do đó, các chương trình lập trình không đồng bộ đã được mở ra: các thư viện mới và cũ bắt đầu sử dụng tính năng coroutines, các khung không đồng bộ bùng nổ phổ biến và các thư viện mới vẫn được viết cho đến ngày nay. Hiệu suất ngang bằng hoặc tốt hơn Node.js, không phải là chưa từng thấy, và trừ khi các kiểu tải của bạn liên quan đến nhiều tác vụ nặng của CPU, thì không có lý do gì mà bạn có thể thực hiện vài nghìn yêu cầu mỗi giây.

Nhưng đủ động lực!

Hãy cùng khảo sát cảnh quan Python hiện tại và kiểm tra một số khung không đồng bộ hàng đầu.

Lốc xoáy

Thật ngạc nhiên, Lốc xoáy Đây là một khuôn khổ mới. Bản phát hành đầu tiên của nó là vào năm 2009 (chính xác là mười năm trước, kể từ khi viết) và kể từ đó, trọng tâm của nó là cung cấp chương trình không đồng bộ vững chắc với độ đồng thời cao.

Tornado không phải là một khung web về cơ bản. Nó là một bộ sưu tập các mô-đun không đồng bộ, cũng được sử dụng để xây dựng mô-đun khung web. Cụ thể hơn, các mô-đun này là:

  • Coroutines và các nguyên thủy khác (tornado.gen, tornado.locks, tornado.queues, v.v.)
  • Các mô-đun mạng (tornado.ioloop, tornado.iostream, v.v.)
  • Các máy chủ và máy khách không đồng bộ (tornado.httpserver, tornado.httpclient, v.v.)

Những thứ này đã được kết hợp để tạo ra các mô-đun khung cuối cùng: tornado.web, tornado.routing, tornado.template, v.v..

nhập Tornado.ioloop
nhập Tornado.web

lớp MainHandler (tornado.web.RequestHandler):
def nhận (tự):
tự viết ("Chào thế giới")

def make_app ():
return tornado.web.Ứng dụng ([
(r"/", MainHandler),
])

nếu __name__ == "__chủ yếu__":
ứng dụng = make_app ()
app.listen (8888)
tornado.ioloop.IOLoop.cản (). start ()

Tornado có một sự theo đuổi mạnh mẽ và tận tụy trong cộng đồng Python và được các kiến ​​trúc sư giàu kinh nghiệm sử dụng để xây dựng các hệ thống có khả năng cao. Đó là một khung từ lâu đã có câu trả lời cho các vấn đề về đồng thời nhưng có lẽ không trở thành xu hướng vì nó không hỗ trợ tiêu chuẩn WSGI và quá nhiều tiền mua (hãy nhớ rằng phần lớn các thư viện Python vẫn đồng bộ ).

Sanic

Sanic là một khung công tác hiện đại của người Viking theo nghĩa thực sự của từ này: nó không hỗ trợ phiên bản Python dưới 3.6, hỗ trợ cú pháp async / await đơn giản và phổ biến ngoài hộp, và kết quả là, không khiến bạn đọc được tải về tài liệu và giữ các trường hợp cạnh trong tâm trí của bạn trước khi bạn có thể viết trình xử lý HTTP đầu tiên của mình.

Kết quả là, cú pháp kết quả là khá dễ chịu (theo ý kiến ​​của tôi, ít nhất); nó giống như mã bạn viết với bất kỳ microframework nào khác (ví dụ Flask, CherryPy) chỉ với một vài async được rắc vào:

từ Sanic nhập khẩu Sanic
từ sanic.response nhập json

ứng dụng = Sanic ()

@ app.route ("/")
kiểm tra lỗi async (yêu cầu):
trả lại json ({"xin chào": "thế giới"})

nếu __name__ == "__chủ yếu__":
app.run (máy chủ ="0,0.0,0", cổng = 8000)

Sanic được cho là khung async phổ biến nhất và được yêu thích nhất trong thế giới Python. Nó có hầu hết tất cả các tính năng mà bạn muốn cho các dự án của mình – định tuyến, phần mềm trung gian, cookie, phiên bản, bản thiết kế, chế độ xem dựa trên lớp, tệp tĩnh, phát trực tuyến, ổ cắm, v.v. – và những gì nó không cung cấp ngoài hộp – templating, hỗ trợ cơ sở dữ liệu, I / O tệp, hàng đợi – có thể được thêm vào vì có đủ thư viện async cho những thứ này cho đến ngày hôm nay.

Vibora

Vibora là một người anh em họ thân thiết của Sanic, ngoại trừ việc nó đã cố định trở thành máy chủ web Python nhanh nhất hiện có. Trong thực tế, lần truy cập đầu tiên của trang web của nó chào đón bạn bằng một so sánh khung:

Như bạn có thể thấy, Vibora tuyên bố nhanh hơn nhiều lần so với các khung cổ điển và nhanh hơn gấp đôi so với Sanic, đối thủ cạnh tranh gần nhất của nó. Tất nhiên, điểm chuẩn sẽ được thực hiện với một hạt muối. ��

Mặc dù về cú pháp và tính năng, Vibora có thể so sánh với Sanic (hoặc thậm chí tốt hơn một chút vì nó chứa các thư viện phổ biến và những thứ như tạo khuôn mẫu có sẵn ngoài hộp), tôi coi Sanic sẽ trưởng thành hơn vì nó đã tồn tại lâu hơn và đã một cộng đồng lớn hơn.

từ Vibora nhập Vibora, JsonResponse

ứng dụng = Vibora ()

@ app.route (‘/’)
async def home ():
trả lại JsonResponse ({‘xin chào’: ‘thế giới’})

if __name__ == ‘__main__’:
app.run (máy chủ ="0,0.0,0", cổng = 8000)

Tuy nhiên, nếu bạn là một người nghiện hiệu suất, Vibora có thể làm nổi thuyền của bạn. Điều đó nói rằng, khi viết Vibora đang thực hiện viết lại hoàn chỉnh để trở nên nhanh hơn, và liên kết với phiên bản hiệu suất của nó cho biết, đó là khu vực phát triển nặng nề. Nó sẽ trở thành một sự thất vọng đối với những người nhặt được Vibora sớm hơn và sớm phải đối mặt với những thay đổi đột phá, nhưng này, đó là những ngày đầu trong thế giới đồng bộ Python và không ai mong muốn mọi thứ sẽ ổn định.

Bộ tứ

Nếu bạn thích phát triển trong Flask nhưng không có hỗ trợ async, bạn sẽ thích Bộ tứ rất nhiều.

Quart phù hợp với ÁC tiêu chuẩn, là sự kế thừa của tiêu chuẩn WSGI nổi tiếng và cung cấp hỗ trợ không đồng bộ. Điều thú vị về Quart là nó không chỉ tương tự Flask mà còn thực sự tuân thủ API Flask! Tác giả của khung này muốn duy trì cảm giác Flask và chỉ cần thêm async, WebSockets và hỗ trợ HTTP 2 cho nó. Do đó, bạn có thể tìm hiểu Quart ngay từ tài liệu Flask, chỉ cần lưu ý rằng các chức năng trong Quart là không đồng bộ.

từ quart nhập Quart

ứng dụng = Quart (__ name__)

@ app.route (‘/’)
async def xin chào ():
trở lại ‘xin chào’

ứng dụng.run ()

Cảm thấy (gần như) chính xác như Flask, không phải là nó?!

Vì Quart là một sự phát triển của Flask, tất cả các tính năng bên trong Flask đều có sẵn: định tuyến, phần mềm trung gian, phiên, tạo khuôn mẫu, bản thiết kế, v.v. Trên thực tế, bạn thậm chí có thể sử dụng các tiện ích mở rộng Flask trực tiếp bên trong Quart. Một lưu ý là Python 3.7+ chỉ được hỗ trợ, nhưng, sau đó, nếu bạn không chạy phiên bản Python mới nhất, có thể async không phải là đường dẫn đúng. ��

Tài liệu này thực sự muốn nếu bạn không có kinh nghiệm trước đó với Flask, nhưng tôi có thể đề xuất Quart vì nó có lẽ là khung async duy nhất sắp phát hành 1.0.

FastAPI

Khung cuối cùng (nhưng ấn tượng nhất) trong danh sách này là FastAPI. Không, nó không phải là một khung chỉ API; thực tế, FastAPI dường như là khung công tác giàu tài liệu và giàu tài liệu nhất mà tôi đã gặp khi nghiên cứu các khung công tác Python không đồng bộ.

Thật thú vị khi lưu ý rằng tác giả khung đã nghiên cứu sâu một số khung khác, từ những người đương thời như Django đến những người hiện đại như Sanic, cũng như tìm kiếm các công nghệ vào NestJS (khung web Node.js, typecript). Triết lý phát triển của họ và so sánh rộng rãi có thể được đọc đây.

Cú pháp khá dễ chịu; người ta thậm chí có thể tranh luận rằng nó thú vị hơn nhiều so với các khung công tác khác mà chúng tôi đã gặp:

rom fastapi nhập FastAPI

ứng dụng = FastAPI ()

@ app.get ("/ người dùng / tôi")
async def read_user_me ():
trở về {"tên người dùng": "người dùng hiện tại"}

@ app.get ("/ người dùng / {user_id}")
async def read_user (user_id: str):
trở về {"tên người dùng": tên người dùng}

Và bây giờ, danh sách các tính năng sát thủ khiến FastAPI vượt trội hơn các khung khác:

Tạo tài liệu API tự động: Ngay sau khi điểm cuối của bạn được viết, bạn có thể chơi với API bằng giao diện người dùng tuân thủ tiêu chuẩn. SwaggerUI, ReDoc và những người khác được hỗ trợ.

Khung công tác cũng thực hiện tài liệu mô hình dữ liệu tự động với Lược đồ JSON.

Phát triển hiện đại: Vâng, từ hiện đại, người Viking bị ném rất nhiều, nhưng tôi thấy FastAPI thực sự để nói chuyện. Tiêm phụ thuộc và gợi ý loại là công dân hạng nhất, thực thi không chỉ các nguyên tắc mã hóa tốt mà còn ngăn ngừa lỗi và nhầm lẫn trong thời gian dài.

Tài liệu mở rộng: Tôi không biết về bạn, nhưng tôi là một người hoàn hảo cho tài liệu tốt. Và trong lĩnh vực này, FastAPI chiến thắng. Nó có các trang trên các trang tài liệu giải thích hầu hết mọi sự tinh tế và xem ra! khoảnh khắc cho các nhà phát triển của tất cả các cấp. Tôi cảm nhận được một trái tim và tâm hồn rõ ràng của người Viking trong các tài liệu ở đây và so sánh duy nhất tôi có thể tìm thấy là các tài liệu Django (vâng, các tài liệu FastAPI rất tốt!).

Ngoài những điều cơ bản: FastAPI có hỗ trợ cho WebSockets, Truyền phát, cũng như GraphQL, bên cạnh việc có tất cả các trình trợ giúp truyền thống như CORS, phiên, cookie, v.v..

Và những gì về hiệu suất? Chà, FastAPI được xây dựng trên thư viện Star Muff tuyệt vời, dẫn đến hiệu suất phù hợp với Node, và trong một số trường hợp, thậm chí là Go! Nói chung, tôi thực sự có cảm giác rằng FastAPI sẽ chạy đua về phía trước như là khung async hàng đầu cho Python.

Phần kết luận

Ngày nay, có rất nhiều thứ đang diễn ra trong bối cảnh không đồng bộ của Python. Các khung mới đang xuất hiện, các khung cũ đang được viết lại và các thư viện đang được phát triển để phù hợp với hành vi không đồng bộ. Mặc dù Python có hỗ trợ tích hợp cho một vòng lặp sự kiện và nó có thể làm cho các phần của ứng dụng của bạn không đồng bộ, bạn có thể chọn sử dụng toàn bộ và xây dựng trên một trong các khung ở đây. Chỉ cần chắc chắn để ghi nhớ lâu dài: một số khung công tác Python không đồng bộ đang ở giai đoạn đầu và đang được phát triển nhanh chóng, điều này sẽ làm tổn thương quá trình phát triển của bạn và tăng chi phí kinh doanh. Chú ý là chính!

Nhưng tất cả đã nói và làm; Python sẵn sàng sản xuất để cung cấp hiệu suất phát sáng khi nói đến các khung web. Nếu từ lâu bạn đã nghĩ đến việc chuyển sang Node, thì bây giờ bạn không cần phải! ��

Nghe hay đấy? Làm chủ Python hôm nay!

THẺ

  • Con trăn

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map