חמש המסגרות המובילות באסינכרוני אינטרנט עבור פייתון

תכנות אסינכרוניה היא אזרח מהשורה הראשונה בפיתון כעת. אם אתה מפתח אתרים, יש מסגרות מדהימות שאתה יכול לבחור מהן!


נכון לכתיבה, אסינכרוניה אינה סתם מילת באזז בקהילת פייתון. עם שחרורו אסינסיו הספרייה בגרסת 3.5, פייתון הכיר בהשפעה של Node.js על פיתוח אתרים והכניס לשתי מילות מפתח חדשות בשפה – אסינכרונות ומחכים. זה היה עניין גדול מאוד מכיוון ששפת הפייתון נזהרת מאוד מהרחבת תחביר הליבה אלא אם כן יש צורך דחוף, מה שרק מצביע על עד כמה חשובים מהותי מפתחי פייתון לשקול את היכולות האסינכרוניות..

כתוצאה מכך נפתחו שערי שיטפון של תכנות אסינכרוניות: ספריות חדשות וותיקות החלו לעשות שימוש בתכונה הקורוטינית, מסגרות אסינכרוניות התפוצצו בפופולריות, ועדיין כתובות חדשות. ביצועים בהשוואה לביצועים של Node.js או טובים מהם אינם ידועים, ולמעט אם דפוסי הטעינה שלך כרוכים בשפע של משימות כבדות מעבד, אין סיבה שלא תוכל לבצע כמה אלפי בקשות בשנייה..

אבל מספיק מוטיבציה!

בואו נסקור את הנוף הנוכחי של פייתון ונבדוק כמה מהמסגרות האסינכרוניות המובילות.

טורנדו

למרבה ההפתעה, טורנדו זה בכלל לא מסגרת חדשה. שחרורו הראשוני היה בשנת 2009 (לפני עשר שנים בדיוק, נכון לכתיבת שורות אלה) ומאז, המוקד שלה היה באספקת תכנות אסינכרוניות סולידיות עם סיביות גבוהה.

טורנדו אינו מסגרת אינטרנטית באופן בסיסי. זהו אוסף של מודולים אסינכרוניים, המשמשים גם לבניית מודול המסגרת באינטרנט. ליתר דיוק, מודולים אלה הם:

  • קורוטין ושאר פרימיטיביות (tornado.gen, tornado.locks, tornado.queues וכו ‘)
  • מודולי רשת (tornado.ioloop, tornado.iostream וכו ‘)
  • שרתים ולקוחות אסינכרוניים (tornado.httpserver, tornado.httpclient וכו ‘)

אלה שולבו לייצור מודולי המסגרת הסופיים: tornado.web, tornado.routing, tornado.template, וכו ‘.

יבוא טורנדו
יבוא טורנדו

כיתה MainHandler (tornado.web.RequestHandler):
def לקבל (עצמי):
כתיבה עצמית ("שלום עולם")

def make_app ():
להחזיר tornado.web.Application ([
(ר"/", MainHandler),
])

אם __name__ == "__main__":
app = make_app ()
app.listen (8888)
tornado.ioloop.IOLoop.current (). התחל ()

לטורנדו מעקב חזק ומחויב בקהילת פייתון ומשמש אדריכלים מנוסים לבניית מערכות בעלות יכולת גבוהה. זו מסגרת שכבר מזמן הייתה התשובה לבעיות במקביל, אך אולי לא הפכה למיינסטרים מכיוון שהיא אינה תומכת בתקן WSGI והייתה רכישה גדולה מדי (זכרו שרוב הספריות של פייתון עדיין סינכרוניות ).

סניק

סניק היא מסגרת “מודרנית” במובן האמיתי של המילה: היא אינה תומכת בגרסת פייתון מתחת ל -3.6, תומכת בתחביר הפשוט / אוניברסלי / ממתין מחוץ לתיבה, וכתוצאה מכך, אינה גורמת לך לקרוא המון של תיעוד ושמור על מקרי הקצה לפני שתוכל לכתוב את המטפל הראשון שלך ב- HTTP.

כתוצאה מכך התחביר שהתקבל הוא די נעים (לדעתי לפחות); זה דומה לקוד שכתבת עם כל מיני מסגרות מיקרו אחרות (Flask, CherryPy, למשל) עם כמה אסינק שפוזרו פנימה:

מייבוא ​​סאני
מאת sanic.response יבוא ג’ונסון

app = Sanic ()

@ app.route ("/")
מבחן def async (בקשה):
להחזיר ג’סון ({"שלום": "עולם"})

אם __name__ == "__main__":
app.run (מארח ="0.0.0.0", יציאה = 8000)

Sanic הוא ללא ספק המסגרת האסינקטית הפופולרית והאהובה ביותר בעולם הפיתון. יש לו כמעט את כל הפיצ’רים שתרצו לפרויקטים שלכם – ניתוב, תווכה, קובצי Cookie, גרסאות, תוכניות תצוגה, תצוגות מבוססות כיתה, קבצים סטטיים, סטרימינג, שקעים וכו ‘- ומה שהיא לא מציעה מחוץ לקופסה ניתן להוסיף תבניות, תמיכה במסד נתונים, קלט / פלט של קבצים, תורים – שכן ישנן מספיק ספריות אסינכרוניות עבור אלה נכון להיום..

ויברה

ויברה הוא בן דוד קרוב של סאניץ ‘, אלא שהוא מקובע להיות שרת האינטרנט המהיר ביותר של פייתון שם בחוץ. למעשה, הביקור הראשון באתר האינטרנט שלו מברך אותך בהשוואה למסגרת:

כפי שאתה יכול לראות, Vibora טוען שהוא מהיר פי כמה מהמסגרות הקלאסיות והיה מהיר יותר מפי שניים מסאניץ ‘, המתחרה הקרוב ביותר שלה. כמובן שיש לקחת מדדים עם גרגר מלח. ��

אם כי בתחביר ותכונות, Vibora דומה ל- Sanic (או אולי אפילו מעט טוב יותר מכיוון שהיא אוגרת ספריות פופולריות ודברים כמו תבנית זמינים מחוץ לקופסה), הייתי מחשיב את Sanic כבשל יותר מכיוון שהיא קיימת זמן רב יותר קהילה גדולה יותר.

מייבוא ​​ויברורה Vibora, JsonResponse

app = Vibora ()

@ app.route (‘/’)
async def home ():
להחזיר את JsonResponse ({‘שלום’: ‘עולם’})

אם __name__ == ‘__main__’:
app.run (מארח ="0.0.0.0", יציאה = 8000)

אם אתה נרקומני ביצועים, ויברורה עשויה לצוף את הסירה שלך. עם זאת, נכון לכתיבת ויברורה מבצעת שכתוב מחדש שלם כדי להפוך מהיר עוד יותר קישור לגרסת הביצועים שלה כתוב שהוא תחת “פיתוח כבד”. זה יהפוך לאכזב עבור אלה שהרימו את ויברורה מוקדם יותר ובקרוב חייבים להתמודד עם שינויים שוברים, אבל היי, מדובר בימים הראשונים בעולם האסינק של פייתון, ואף אחד לא מצפה שדברים יהיו יציבים.

רבע גלון

אם אתה נהנה להתפתח בפלסק אך מפריע לחוסר התמיכה באסינכרון, אתה תיהנה רבע גלון הרבה.

קוארט תואם את ה- ASGI standard, שהוא ממשיך דרכו של WSGI המפורסם ומציע תמיכה באסינכרון. הדבר המעניין בקווארט הוא שהוא לא רק דומה לבקבוק, אלא שהוא תואם ממשק ה- API של Flask! הכותב של מסגרת זו רצה לשמר את תחושת הבקבוק ופשוט להוסיף אליו תמיכה ב- async, WebSockets ו- HTTP 2. כתוצאה מכך, תוכלו ללמוד את ה- Quart ישירות מתיעוד הבקבוק, רק קחו בחשבון שהפונקציות ב- Quart הינן אסינכרוניות..

מיבוא Quart – –

app = Quart (__ name__)

@ app.route (‘/’)
async def שלום ():
חזור ‘שלום’

app.run ()

מרגיש (כמעט) בדיוק כמו בקבוק, לא?!

מכיוון שקווארט הוא התפתחות של Flask, כל התכונות בתוך Flask זמינות: ניתוב, תווכה, הפעלות, תבניות, תוכניות העתקה וכן הלאה. למעשה, אתה יכול אפילו להשתמש בתוספי בקבוק ישירות בתוך קוארט. תפיסה אחת היא ש- Python 3.7+ נתמך רק, אבל אם אתה לא מפעיל את הגרסה האחרונה של Python, אולי אסינכרון אינו הדרך הנכונה. ��

התיעוד ממש רוצה אם אין לך ניסיון קודם עם Flask, אבל אני יכול להמליץ ​​על Quart מכיוון שהיא ככל הנראה המסגרת האסינקטית היחידה שמתקרבת לשחרור 1.0 שלה בקרוב.

FastAPI

המסגרת האחרונה (אך המרשימה ביותר) ברשימה זו היא FastAPI. לא, זה לא מסגרת API בלבד; למעשה, נראה ש- FastAPI היא המסגרת העשירה ביותר בתכונות ועשירות התיעוד שנתקלתי בהם בעת חקר מסגרות פייתון אסינקניות..

מעניין לציין כי כותב המסגרות חקר כמה מסגרות אחרות לעומק, החל מהעכשוויות כמו Django ועד המודרניות כמו Sanic, וכן בחן את הטכנולוגיות אל NestJS (Node.js, מסגרת אינטרנט מסוג Script). ניתן לקרוא את פילוסופיית ההתפתחות שלהם והשוואות נרחבות כאן.

התחביר די נעים; אפשר אפילו לטעון שזה מהנה הרבה יותר מהמסגרות האחרות בהן נתקלנו:

יבוא

app = FastAPI ()

@ app.get ("/ משתמשים / אותי")
async def read_user_me ():
חזור {"תעודת זהות של המשתמש": "המשתמש הנוכחי"}

@ app.get ("/ משתמשים / {user_id}")
async def read_user (user_id: str):
חזור {"תעודת זהות של המשתמש": תעודת זהות של המשתמש}

ועכשיו, רשימת תכונות הרוצחים הגורמות ל- FastAPI להאפיל על מסגרות אחרות:

יצירת מסמכי API אוטומטיים: ברגע שנקודות הקצה שלך נכתבו, אתה יכול לשחק עם ה- API באמצעות ממשק משתמש תואם לתקנים. SwaggerUI, ReDoc ואחרים נתמכים.

המסגרת גם תיעוד מודל נתונים אוטומטי עם JSON Schema.

פיתוח מודרני: כן, המילה “מודרנית” נזרקת לא מעט, אבל מצאתי ש- FastAPI אכן הולך לדבר. הזרקת תלות ורמיזות מהסוג הם אזרחים מהשורה הראשונה, אשר אוכפים לא רק עקרונות קידוד טובים אלא מונעים באגים ובלבול בטווח הרחוק.

תיעוד נרחב: אני לא יודע מה איתך, אבל אני פראייר מוחלט לתיעוד טוב. ובתחום זה, FastAPI זוכה בידיים למטה. יש בו דפים על גבי דפים של מסמכים המסבירים כמעט כל דקויות קטנות ו”היזהר! ” רגעים למפתחים בכל הרמות. אני מרגיש “לב ונפש” ברור במסמכים כאן, והשוואה היחידה שאני יכול למצוא היא מסמכי Django (כן, מסמכי FastAPI הם כל כך טובים!).

מעבר ליסודות: ל- FastAPI יש תמיכה ב- WebSockets, Streaming, כמו גם ב- GraphQL, מלבד שיש להם את כל העוזרים המסורתיים כמו CORS, הפעלות, עוגיות וכדומה..

ומה עם ההופעה? ובכן, FastAPI בנויה על ספריית Starlette המדהימה, והתוצאה היא ביצועים התואמים את הצומת, ובמקרים מסוימים, אפילו Go! בסך הכל, יש לי באמת תחושה ש- FastAPI הולכת למרוץ קדימה כמסגרת האסינקטית העליונה של פייתון.

סיכום

הרבה קורה בנוף אסינק הפייתון בימינו. מסגרות חדשות צצות, ישנות נכתבות מחדש וספריות מתפתחות כדי להתאים להתנהגות אסינקטית. בעוד שלפייתון יש תמיכה מובנית בלולאת אירועים וניתן להפוך חלקים מהיישום שלך ל- Async, אתה יכול לבחור לעבור הכל ולבנות על אחת המסגרות כאן. רק הקפידו לזכור את הטווח הארוך: כמה ממסגרות האסינק של פייתון שם בחוץ נמצאים בשלבים מוקדמים ומתפתחים במהירות, מה שעלול לפגוע בתהליך הפיתוח שלכם ולהעלות את עלויות העסק. זהירות היא המפתח!

אבל הכל אמרו ועשו; פייתון מוכנה לייצור לספק ביצועים קלים בכל מה שקשור למסגרות אינטרנט. אם במשך כל כך הרבה זמן אתה חושב לעבור לצומת, עכשיו אתה לא צריך! ��

נשמע מגניב? מאסטר פייתון היום!

תגיות:

  • פייתון

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