השחלה בפייתון: למד כיצד לעבוד עם חוטים בפייתון



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

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

המצביעים הבאים יוסקרו במאמר זה,





בואו נתחיל

השחלה בפייתון

מהו חוט בפייתון?

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



אמנם זו הרגשה מדהימה להריץ שני תהליכים שונים בו זמנית, אך יש להבין כי הגרסה הנוכחית של פייתון 3 ומעלה מקודדת בצורה כזו, שרק ניתן להריץ תהליך בכל נקודת זמן נתונה. אם בכל זאת אתה זקוק לשני תהליכים או יותר יחד במקביל ב- CPython, עליך לקודד חלק מהקוד שלך גם בשפות אחרות, כגון C, C ++ ו- Java, ולאחר מכן להריץ אותם דרך השחלה מרובה ב- Python.

אחד היתרונות הידועים ביותר של השחלה ב- Python הוא יכולתו לספק רווח בהירות עיצוב.

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



התחלת חוט בפייתון

עכשיו כשאתה רגיל להגדרת שרשור בפייתון, הבה נסתכל על דוגמה כיצד תוכל ליצור שרשור משלך בפייתון. על מנת ליצור שרשור ב- Python, תחילה עליך לייבא את ספריית השרשור ואז להורות לה להתחיל () כפי שמוצג בדוגמה למטה:

C ++ לקפוץ לתור
יומן רישום ייבוא ​​השחלת ייבוא ​​זמן ייבוא ​​def thread_function (שם): logging.info ('חוט% s: התחלה', שם) time.sleep (2) logging.info ('חוט% s: גימור', שם) אם __name__ == '__main__': format = '% (אסקטיים) s:% (הודעה) s' logging.basicConfig (format = format, level = logging.INFO, datefmt = '% H:% M:% S') logging.info ( 'ראשי & ampampampnbsp & ampampampnbsp: לפני יצירת חוט') x = השחלה. Thread (target = thread_function, args = (1,)) logging.info ('Main & ampampampnbsp & ampampampnbsp: before running thread') x.start () logging.info ('Main & ampampampnbsp & ampampampnbsp: המתן לסיום החוט ') # x.join () logging.info (' ראשי & ampampampnbsp & ampampampnbsp: הכל נעשה ')

תְפוּקָה

פלט - השחלה בפייתון - אדוריקה

כאשר מריצים שרשור ב- Python, מעבירים אותו כפונקציה המכילה רשימת ארגומנטים שעליו לבצע. בדוגמה המשותפת לעיל, אתה מורה לפייתון להריץ את השרשור, thread_function () ולהעביר אותו ל- 1 כארגומנט.

כאשר אתה מפעיל את התוכנית לעיל, הפלט ייראה בערך כך.

החלק הבא של מאמר זה בנושא 'השחלה בפייתון' הבה נראה מה הם חוטי הדמון,

מהם חוטי הדמון?

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

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

עכשיו בואו ונשתנה את התוכנית שלעיל ונראה מה קורה, אם נכניס חוט דמון בקוד.

קוד חדש: x = השחלה. Thread (target = thread_function, args = (1,), daemon = True)

כאשר אתה מריץ את התוכנית לעיל עם השינויים שבוצעו, זה ייראה בערך ככה.

ההבדל בין שתי היציאות הללו הוא שהקו האחרון חסר מהקודמת האחרונה. ה- thread_function () לא קיבל הזדמנות להשלים, מכיוון שהכנסנו שרשור דמון וכשהוא הגיע עד הסוף, הוא יצא מהתוכנית.

מצטרף לשרשור

תאריך תאריך בדוגמת SQL

כעת, לאחר שלמדת על הרעיון של יצירת חוט בפייתון, יחד עם הרעיון של חוט דמוני, הבה נגלה כיצד תוכל להצטרף לשרשורים בפייתון.

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

החלק האחרון של מאמר זה בנושא 'השחלה בפייתון' יראה לכם את האשכולות המרובים העובדים,

עבודה עם חוטים מרובים

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

יומן רישום ייבוא ​​השחלת ייבוא ​​זמן ייבוא ​​def thread_function (שם): logging.info ('חוט% s: התחלה', שם) time.sleep (2) logging.info ('חוט% s: גימור', שם) אם __name__ == '__main__': format = '% (asctime) s:% (message) s' logging.basicConfig (format = format, level = logging.INFO, datefmt = '% H:% M:% S') threads = list ( ) לאינדקס בטווח (3): logging.info ('ראשי & ampampampnbsp & ampampampnbsp: ליצור ולהתחיל חוט% d.', אינדקס) x = השחלה. חוט (target = thread_function, args = (index,)) threads.append (x ) x.start () לאינדקס, חוט בספירה (אשכולות): logging.info ('ראשי & ampampampnbsp & ampampampnbsp: לפני שהצטרף לשרשור% d.', אינדקס) thread.join () logging.info ('ראשי & ampampampnbsp & ampampampnbsp: חוט% d נעשה ', אינדקס)

תְפוּקָה

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

כאשר אתה מריץ את התוכנית לעיל, התוצאה תיראה ככה.

סיכום

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

אז זהו זה חבר'ה אני מקווה שאהבתם את המאמר הזה.

כדי לקבל ידע מעמיק על Python יחד עם היישומים השונים שלו, אתה יכול לאימונים מקוונים חיים עם תמיכה 24/7 וגישה לכל החיים.

יש לך שאלה עבורנו? הזכר אותם במדור ההערות במאמר זה ונחזור אליך.