עזרה ב-פייתון

עזרה ב-פייתון

שלום לכולם

הייתי רוצה לדעת מה קורה לפונקציה שלפניה אני מוסיף את התווית
@fork
אני יודע שתוויות זו יוצרת תהליך חדש אבל האם בסיום הפונקציה תהליך זה מת או שעדיין ממשיך לרוץ.

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

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

אז ליצור תהליך נפרד לפונקציה זה ע"י התהליך @fork
השאלה היחידה מה קורה בסיום פונקציה זו ? האם יש לי 2 תהליכים שונים או שאחרי שהפונקציה מסתיימת תהליך הבן מת.
האם ייתכן המצב שהאבא זה שקרא לפונקציה של ה- fork
ממשיך לרוץ לפני שהוא קיבל את הערך המוחזר מהפונקציה - משום מה הדבר נשמע לי מוזר ולא אפשרי
אבל אני לא בקיא בזה יותר מידי

המשך יום נפלא
בתודה מראש
 

Gaus

New member
FORK מפצל את התהליך לתהליך בן, ואבא

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

לעניין הדקורטור FORK, אני לא מכיר אותו, באיזה PACKAGE הוא?
תשתף את קטע הקוד.
באייזה פייתון אתה עובד? 3? 2.7?
 
תודה רבה על המענה

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

כעת התוכנה המתמטית שאני משתמש בה הינה sage

שזו תוכנה מתמטית שבנויה על קטעי קוד בפייתון + קוד ב- cpyton
ושם היה את ה- @fork
כנראה שבפייתון רגיל הדבר לא מופיע סליחה טעות שלי.
בכל אופן לעניין הדקודר ניתן למצוא אותו כאן
https://github.com/vincent-octo/sutils

sage למיטב הבנתי מובססת על פייתון 2.7 לכן אני עובד עליה.
לעניין הספריה
concurrent.futures
היא לא מוגדרת אצלי בתוכנה כנראה היא מגרסה חדשה יותר.
לכן לא רלוונטי עבורי.

אבל תודה על כל העזרה

אני אקרא מעט על pipe
 

Gaus

New member
concurrent.futures מתאים ל2.7

תוריד את הPACKAGE ותתקין.
 
סבבה תודה ניצול שאלה

האם ישנה אפשרות לדעת על איזה ליבה הקוד שלי רץ?
&nbsp
ידוע לי שזה תלוי במתמזמן של מערכת ההפעלה. והוא בעצם זה שמחליט שאני כעת אפעל במעבד 1 בעוד שבעוד כמה שניות אני אעבור לליבה מספר 2
&nbsp
אם ישנם טעויות במינוח סליחה. האם יש אפשרות לדעת בזמן ריצה באיזה מעבד התהליך רץ?
כאילו אם אני התוכנה רצה בזמן x על מעבד מספר 1 אני ארצה לדעת זאת .
&nbsp
בכל אופן תודה על העזרה
וחג שמח
&nbsp
 
למעלה