עבור לתוכן

פייתון: הריגת thread כשמאבדים גישה אליו

Featured Replies

פורסם
  • מחבר

אם יש לך אובייקט שמכיל בתוכו thread פשוט תתדאג לשלוח לתרד הודאה שהגיע הזמן לחזור... זה הכל.

אני מניח ש"לחזור " = "למות".

בכל אופן, זה החלק הבעייתי.

איך לעשות זאת באופן אוטומטי כשהמצביע לאובייקט שמכיל את ה-thread לא נגיש יותר.

פורסם

זה לגמרי תלוי בך. אם אתה מייסם thread pool, לחזור זה לקחת את המשימה הבאה או לישון על ה queue .

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

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

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

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

אתה יכול לעשות גם משהו משוגע כמו לשמור weak ref מהטרד לאובייקט ולחזור כשצריך. אתה יכול גם לשלוף את

זה החוצה לתוך אובייקט שמכיל dict עם תרדים ו weak refs לתוך האובייקטים שלהם. אבל אם אתה שואל אותי זה די טיפשי,

כי זה בעצם מ thread pool מביא לך בחינם...

קיצר אני חייב לחזור לכתוב קוד, מקווה שזה עזר לך :)

פורסם
  • מחבר

הדרך הנכונה היא לסיים את התרד ידנית לפני שהאובייקט יוצא מהסקופ.

זה מה שאני רוצה לעשות, אבל באופן אוטומטי, בלי איזו מתודת release שהמשתמש יצטרך לקרוא לה לפני שהמשתמש מאבד את המצביע לאובייקט

אני לא צריך threadpool, אלו שני תרדים שחייבים לרוץ ברקע כדי שהאובייקט יוכל לתפקד

פורסם

משתמש -> אתה מתכוון ללקוח של ה API שלך? לדעתי במצב שבו אתה נותן אובייקט כזה שמן עם 2 תרדים, חובה עליך לתת ללקוח

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

אני בתור הלקוח של ה API שלך לא הייתי רוצה שהוא יקים ויהרוג לי תרדים מאחורי הגב. אם אתה רוצה אתה עדין יכול לשמור

מידע house keeping ולזרוק exception כשהתשמש לא דואג לעשות release .

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

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

המידע (אגב קבל ).

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים