פורסם 2012 ביולי 1013 שנים מחבר אם יש לך אובייקט שמכיל בתוכו thread פשוט תתדאג לשלוח לתרד הודאה שהגיע הזמן לחזור... זה הכל.אני מניח ש"לחזור " = "למות".בכל אופן, זה החלק הבעייתי.איך לעשות זאת באופן אוטומטי כשהמצביע לאובייקט שמכיל את ה-thread לא נגיש יותר.
פורסם 2012 ביולי 1013 שנים זה לגמרי תלוי בך. אם אתה מייסם thread pool, לחזור זה לקחת את המשימה הבאה או לישון על ה queue . לגבי השאלה השניה - הדרך הנכונה היא לסיים את התרד ידנית לפני שהאובייקט יוצא מהסקופ. הדרך היותר נכונה היא להפריד את הקוד שאתה רוצה להריץ מהתרד. תרדים הם שמנים ויקרים, אין לך באמת סיבה להרוג אותם ולהקים חדשים עבור כל task . אלא אם אתה באמת צריך משהו שירוץ הרבה זמן ואז אתה יכול לכתוב אובייקט שידאג לאתחל ולנקות אותם בצורה מסודרת (שזה בעצם לסיים ידנית ). אתה יכול לעשות גם משהו משוגע כמו לשמור weak ref מהטרד לאובייקט ולחזור כשצריך. אתה יכול גם לשלוף את זה החוצה לתוך אובייקט שמכיל dict עם תרדים ו weak refs לתוך האובייקטים שלהם. אבל אם אתה שואל אותי זה די טיפשי, כי זה בעצם מ thread pool מביא לך בחינם... קיצר אני חייב לחזור לכתוב קוד, מקווה שזה עזר לך
פורסם 2012 ביולי 1013 שנים מחבר הדרך הנכונה היא לסיים את התרד ידנית לפני שהאובייקט יוצא מהסקופ.זה מה שאני רוצה לעשות, אבל באופן אוטומטי, בלי איזו מתודת release שהמשתמש יצטרך לקרוא לה לפני שהמשתמש מאבד את המצביע לאובייקטאני לא צריך threadpool, אלו שני תרדים שחייבים לרוץ ברקע כדי שהאובייקט יוכל לתפקד
פורסם 2012 ביולי 1213 שנים משתמש -> אתה מתכוון ללקוח של ה API שלך? לדעתי במצב שבו אתה נותן אובייקט כזה שמן עם 2 תרדים, חובה עליך לתת ללקוחאת השליטה על מחזור החיים. לא רק שהייתי ממש resase אלא גם initialize נפרד ( ולתעד את זה כמובן).אני בתור הלקוח של ה API שלך לא הייתי רוצה שהוא יקים ויהרוג לי תרדים מאחורי הגב. אם אתה רוצה אתה עדין יכול לשמור מידע house keeping ולזרוק exception כשהתשמש לא דואג לעשות release .לגבי איך ספציפית לעקוב אחרי טרדים של אובייקטים מתים - כמו שאמרתי, אני הייתי מיישם את זה עם weak refs או מתוך התרדים לאובייקט שלהם (אתה תמיד יכול לקבל את רשימת התרדים הפעילים), או מתוך אובייקט חיצוני ששומר dict עם המידע (אגב קבל ).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.