5 Asynchronous Web Frameworks สำหรับ Python

การเขียนโปรแกรมแบบอะซิงโครนัสเป็นพลเมืองอันดับหนึ่งใน Python ทันที หากคุณเป็นนักพัฒนาเว็บมีกรอบงานที่น่าทึ่งที่คุณสามารถเลือกได้!


การเขียนแบบอะซิงโครนัสไม่ได้เป็นเพียงแค่คำศัพท์ในชุมชน Python ด้วยการเปิดตัวของมัน asyncio Python รับรู้ถึงผลกระทบของ Node.js ในการพัฒนาเว็บไซต์และแนะนำคำหลักใหม่สองคำในภาษา – async และรอ นี่เป็นข้อตกลงที่ใหญ่มากเพราะภาษา Python ระมัดระวังอย่างยิ่งในการขยายไวยากรณ์หลักเว้นแต่จะมีความจำเป็นเร่งด่วนซึ่งบ่งชี้ว่านักพัฒนา Python สำคัญเพียงใดในการพิจารณาความสามารถแบบอะซิงโครนัส.

ผลที่ตามมาเปิดประตูระบายของการเขียนโปรแกรมแบบอะซิงโครนัส: ห้องสมุดทั้งเก่าและใหม่เริ่มใช้คุณลักษณะ coroutines กรอบอะซิงโครนัสที่ได้รับความนิยมและใหม่ยังคงถูกเขียนอยู่ในปัจจุบัน ประสิทธิภาพที่เหนือกว่าหรือดีกว่า Node.js ไม่เคยได้ยินมาก่อนและถ้ารูปแบบการโหลดของคุณเกี่ยวข้องกับภาระงานหนักของ CPU มากไม่มีเหตุผลว่าทำไมคุณไม่สามารถส่งคำขอได้สองสามพันครั้งต่อวินาที.

แต่แรงจูงใจเพียงพอ!

มาสำรวจภูมิทัศน์ Python ปัจจุบันและดูเฟรมเวิร์กแบบอะซิงโครนัสชั้นนำบางส่วน.

พายุทอร์นาโด

อย่างแปลกใจ, พายุทอร์นาโด ไม่ใช่กรอบใหม่เลย การเปิดตัวครั้งแรกของมันคือในปี 2009 (ตรงกับสิบปีที่แล้วในฐานะของการเขียน) และตั้งแต่นั้นมาโฟกัสของมันก็คือการให้การเขียนโปรแกรมแบบอะซิงโครนัสที่มั่นคงด้วยหินพร้อมกันสูง.

ทอร์นาโดไม่ใช่เว็บเฟรมเวิร์ค เป็นชุดของโมดูลแบบอะซิงโครนัสซึ่งใช้เพื่อสร้างโมดูลเฟรมเวิร์กเว็บ โดยเฉพาะอย่างยิ่งโมดูลเหล่านี้คือ:

  • Coroutines และ primitives อื่น ๆ (tornado.gen, tornado.locks, tornado.queues ฯลฯ )
  • โมดูลเครือข่าย (tornado.ioloop, tornado.iostream ฯลฯ )
  • เซิร์ฟเวอร์และไคลเอ็นต์แบบอะซิงโครนัส (tornado.httpserver, tornado.httpclient ฯลฯ )

สิ่งเหล่านี้ถูกรวมเข้าด้วยกันเพื่อสร้างโมดูลเฟรมเวิร์กสุดท้าย: tornado.web, tornado.routing, tornado.template ฯลฯ.

นำเข้า tornado.ioloop
นำเข้า tornado.web

ชั้น MainHandler (tornado.web.RequestHandler):
def get (self):
self.write ("สวัสดีชาวโลก")

def make_app ():
คืน tornado.web.Application ([
(R"/", MainHandler),
])

ถ้า __name__ == "__หลัก__":
แอพ = make_app ()
app.listen (8888)
tornado.ioloop.IOLoop.current (). เริ่มต้น ()

ทอร์นาโดมีความแข็งแกร่งและมุ่งมั่นต่อไปในชุมชน Python และใช้งานโดยสถาปนิกที่มีประสบการณ์เพื่อสร้างระบบที่มีความสามารถสูง เป็นกรอบที่ตอบคำถามเกี่ยวกับการเกิดพร้อมกันมานาน แต่อาจไม่เป็นกระแสหลักเนื่องจากไม่รองรับมาตรฐาน WSGI และซื้อมากเกินไป (โปรดจำไว้ว่าห้องสมุด Python จำนวนมากยังคงซิงโครนัส ).

Sanic

Sanic เป็นกรอบ“ ทันสมัย” ในความหมายที่แท้จริงของคำว่า: มันไม่รองรับ Python เวอร์ชั่นต่ำกว่า 3.6, รองรับการซิงโครนัสแบบ async ที่ง่ายและเป็นสากล / ที่รอคอยอยู่นอกกรอบและเป็นผลให้ไม่อ่านโหลด ของเอกสารและเก็บขอบกรณีในใจของคุณก่อนที่คุณจะสามารถเขียนตัวจัดการ HTTP แรกของคุณ.

เป็นผลให้ไวยากรณ์ที่เกิดขึ้นเป็นที่พอใจมาก (ในความคิดของฉันอย่างน้อย); มันคล้ายกับรหัสที่คุณเขียนด้วยกล้องจุลทรรศน์อื่น ๆ (เช่น Flask, CherryPy) ด้วย async เพียงไม่กี่ sprinkled ใน:

จาก sanic นำเข้า Sanic
จาก sanic.response นำเข้า json

แอพ = Sanic ()

@ app.route ("/")
การทดสอบ def async (คำขอ):
ส่งคืน json ({"สวัสดี": "โลก"})

ถ้า __name__ == "__หลัก__":
app.run (เจ้าภาพ ="0.0.0.0", พอร์ต = 8000)

Sanic เป็นเฟรมเวิร์กแบบ async ที่เป็นที่นิยมและเป็นที่นิยมมากที่สุดในโลก Python มันมีคุณสมบัติเกือบทั้งหมดที่คุณต้องการสำหรับโครงการของคุณ – การกำหนดเส้นทาง, มิดเดิลแวร์, คุกกี้, การกำหนดเวอร์ชัน, พิมพ์เขียว, มุมมองแบบคลาส, ไฟล์สแตติก, สตรีมมิ่ง, ซ็อกเก็ต ฯลฯ – และสิ่งที่มันไม่มีให้ – การสร้างเทมเพลตการสนับสนุนฐานข้อมูลไฟล์ I / O คิว – สามารถเพิ่มได้เนื่องจากมีไลบรารี async เพียงพอสำหรับสิ่งเหล่านี้ ณ วันนี้.

Vibora

Vibora เป็นลูกพี่ลูกน้องของ Sanic ยกเว้นว่าได้รับการแก้ไขให้กลายเป็นเว็บเซิร์ฟเวอร์ Python ที่เร็วที่สุด ในความเป็นจริงการเยี่ยมชมเว็บไซต์เป็นครั้งแรกทักทายคุณด้วยการเปรียบเทียบกรอบ:

อย่างที่คุณเห็น Vibora อ้างว่าเร็วกว่ากรอบคลาสสิกหลายเท่าและเร็วกว่า Sanic ซึ่งเป็นคู่แข่งที่ใกล้ที่สุดมากกว่าสองเท่า แน่นอนว่าต้องมีการวัดเปรียบเทียบด้วยเม็ดเกลือ ��

แม้ว่าในไวยากรณ์และคุณสมบัติ Vibora นั้นเปรียบได้กับ Sanic (หรืออาจจะดีกว่าเล็กน้อยเพราะมันรวมห้องสมุดยอดนิยมและสิ่งต่าง ๆ เช่น templating พร้อมใช้งานออกจากกล่อง) ฉันคิดว่า Sanic นั้นจะมีความเป็นผู้ใหญ่มากกว่า ชุมชนที่ใหญ่กว่า.

จาก vibora นำเข้า Vibora, JsonResponse

app = Vibora ()

@ app.route ( ‘/’)
async def home ():
return JsonResponse ({‘hello’: ‘world’})

ถ้า __name__ == ‘__main__’:
app.run (เจ้าภาพ ="0.0.0.0", พอร์ต = 8000)

หากคุณเป็นคนขี้ยาคุณอาจ Vibora ลอยเรือของคุณ ที่กล่าวว่าขณะที่เขียน Vibora กำลังดำเนินการเขียนที่สมบูรณ์เพื่อให้เร็วยิ่งขึ้นและ ลิงค์ สำหรับเวอร์ชันประสิทธิภาพบอกว่ามันอยู่ภายใต้“ การพัฒนาอย่างมาก” มันจะเป็นการลดทอนสำหรับผู้ที่ได้รับ Vibora ก่อนหน้านี้และในไม่ช้าจะต้องเผชิญกับการเปลี่ยนแปลงที่รุนแรง แต่เดี๋ยวก่อนมันเป็นวันแรกในโลก Python async และไม่มีใครคาดหวังว่าสิ่งต่าง ๆ จะมั่นคง.

Quart

หากคุณสนุกกับการพัฒนาใน Flask แต่ขาดการสนับสนุน async คุณจะเพลิดเพลิน Quart มาก.

Quart นั้นสอดคล้องกับ ASGI มาตรฐานซึ่งเป็นตัวตายตัวแทนของมาตรฐาน WSGI ที่มีชื่อเสียงและให้การสนับสนุน async สิ่งที่น่าสนใจเกี่ยวกับ Quart คือไม่เพียง แต่คล้ายกับ Flask เท่านั้น แต่แท้จริงแล้วสอดคล้องกับ Flask API! ผู้เขียนเฟรมเวิร์กนี้ต้องการคงความรู้สึกของ Flask และเพิ่มการสนับสนุน async, WebSockets และ HTTP 2 ดังนั้นคุณสามารถเรียนรู้ Quart ได้โดยตรงจากเอกสาร Flask เพียงจำไว้ว่าการทำงานใน Quart นั้นไม่ตรงกัน.

จากการนำเข้าควอร์ตควอร์ต

แอพ = Quart (__ name__)

@ app.route ( ‘/’)
async def hello ():
กลับมา ‘สวัสดี’

app.run ()

รู้สึกเหมือน (เกือบ) เหมือน Flask ไม่เป็นเช่นนั้น?!

เนื่องจาก Quart เป็นวิวัฒนาการของ Flask คุณลักษณะทั้งหมดภายใน Flask จึงมีให้ใช้: การกำหนดเส้นทางมิดเดิลแวร์เซสชันการสร้างเทมเพลตพิมพ์เขียวและอื่น ๆ ในความเป็นจริงคุณสามารถใช้ส่วนขยาย Flask ได้โดยตรงภายใน Quart สิ่งหนึ่งที่น่าสนใจคือสนับสนุน Python 3.7+ เท่านั้น แต่ถ้าคุณไม่ได้ใช้ Python เวอร์ชันล่าสุดบางที async อาจไม่ใช่เส้นทางที่ถูกต้อง ��

เอกสารต้องการอย่างมากหากคุณไม่เคยมีประสบการณ์กับ Flask มาก่อน แต่ฉันสามารถแนะนำ Quart ได้เพราะมันอาจเป็นเพียง async framework ที่ใกล้กับการเปิดตัว 1.0 ในไม่ช้า.

FastAPI

กรอบสุดท้าย (แต่น่าประทับใจที่สุด) ในรายการนี้คือ FastAPI. ไม่ไม่ใช่กรอบ API เท่านั้น ในความเป็นจริง FastAPI น่าจะเป็นเฟรมเวิร์กที่มีคุณสมบัติหลากหลายและมีเอกสารมากมายที่ฉันเจอเมื่อทำการค้นคว้าเฟรมเวิร์ก async Python.

เป็นที่น่าสนใจที่จะสังเกตว่าผู้เขียนกรอบศึกษากรอบหลาย ๆ อย่างในเชิงลึกตั้งแต่แนวร่วมสมัยอย่าง Django ไปจนถึงสมัยใหม่เช่น Sanic รวมถึงการค้นหาเทคโนโลยีใน NestJS (node.js, กรอบงานเว็บ typescript) สามารถอ่านปรัชญาการพัฒนาและการเปรียบเทียบอย่างละเอียดได้ ที่นี่.

ไวยากรณ์ค่อนข้างน่าพอใจ เราสามารถโต้แย้งได้ว่าสนุกกว่ากรอบอื่น ๆ ที่เราเจอ:

rom fastapi นำเข้า FastAPI

แอพ = FastAPI ()

@ app.get ("/ ผู้ใช้ / ฉัน")
async def read_user_me ():
กลับ {"user_id": "ผู้ใช้ปัจจุบัน"}

@ app.get ("/ ผู้ใช้ / {} user_id")
async def read_user (user_id: str):
กลับ {"user_id": user_id}

และตอนนี้รายการคุณสมบัตินักฆ่าที่ทำให้ FastAPI โดดเด่นกว่ากรอบอื่น ๆ :

การสร้างเอกสาร API อัตโนมัติ: ทันทีที่เขียนจุดสิ้นสุดของคุณคุณสามารถเล่นกับ API โดยใช้ UI ที่เป็นไปตามมาตรฐาน รองรับ SwaggerUI, ReDoc และอื่น ๆ.

เฟรมเวิร์กยังจัดทำเอกสารโมเดลข้อมูลอัตโนมัติด้วย JSON Schema.

การพัฒนาที่ทันสมัย: ใช่คำว่า “ทันสมัย” ถูกขว้างไปมาก แต่ฉันพบ FastAPI จริง ๆ แล้วเดินพูด การพึ่งพาการฉีดและการบอกใบ้ประเภทเป็นพลเมืองชั้นนำบังคับใช้ไม่เพียง แต่หลักการเข้ารหัสที่ดีเท่านั้น แต่ยังป้องกันข้อผิดพลาดและความสับสนในระยะยาว.

เอกสารกว้างขวาง: ฉันไม่รู้เกี่ยวกับคุณ แต่ฉันเป็นคนดูดข้อมูลทั้งหมดสำหรับเอกสารที่ดี และในพื้นที่นี้ FastAPI เป็นฝ่ายชนะ มันมีหน้าเอกสารหน้าที่อธิบายเกือบทุกความละเอียดอ่อนและ“ ระวัง!” ช่วงเวลาสำหรับนักพัฒนาทุกระดับ ฉันรู้สึกถึง“ หัวใจและจิตวิญญาณ” ที่ชัดเจนในเอกสารที่นี่และการเปรียบเทียบเดียวที่ฉันพบคือเอกสาร Django (ใช่เอกสาร FastAPI นั้นดีมาก!).

เกินพื้นฐาน: FastAPI รองรับ WebSockets, Streaming และ GraphQL นอกเหนือจากการมีผู้ช่วยแบบดั้งเดิมเช่น CORS, เซสชัน, คุกกี้และอื่น ๆ.

แล้วประสิทธิภาพล่ะ? FastAPI ถูกสร้างขึ้นบนห้องสมุด Starlette ที่น่าทึ่งซึ่งส่งผลให้ประสิทธิภาพการทำงานตรงกับโหนดและในบางกรณีแม้แต่ Go! สรุปแล้วฉันมีความรู้สึกจริง ๆ ว่า FastAPI กำลังจะวิ่งไปข้างหน้าในฐานะเฟรมเวิร์ก async ชั้นนำสำหรับ Python.

ข้อสรุป

มีหลายอย่างเกิดขึ้นใน Python async landscape ในทุกวันนี้ เฟรมเวิร์กใหม่กำลังโผล่ขึ้นมาเฟรมเก่ากำลังถูกเขียนใหม่และไลบรารีกำลังถูกพัฒนาเพื่อให้ตรงกับพฤติกรรมของ async ในขณะที่ Python มีการสนับสนุนในตัวสำหรับการวนรอบเหตุการณ์และเป็นไปได้ที่จะสร้างส่วนของแอปพลิเคชันของคุณเป็น async คุณสามารถเลือกที่จะเข้ามาทั้งหมดและสร้างหนึ่งในเฟรมเวิร์กที่นี่ อย่าลืมคำนึงถึงระยะยาว: กรอบงาน Python async หลายอย่างนั้นยังอยู่ในช่วงเริ่มต้นและมีการพัฒนาอย่างรวดเร็วซึ่งจะส่งผลเสียต่อกระบวนการพัฒนาและเพิ่มต้นทุนทางธุรกิจ ข้อควรระวังคือกุญแจสำคัญ!

แต่ทั้งหมดพูดและทำ; Python พร้อมสำหรับการผลิตเพื่อมอบประสิทธิภาพการกระจายแสงเมื่อพูดถึงเว็บเฟรมเวิร์ก ถ้าหากคุณคิดจะย้ายไปที่โหนดตอนนี้คุณไม่จำเป็นต้องทำ! ��

ฟังดูดีนะ? Master Python วันนี้!

Tags:

  • หลาม

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