[Python-il] python-compatible cython?

1 view
Skip to first unread message

Roee Kashi

unread,
Mar 21, 2019, 5:40:27 PM3/21/19
to pyth...@hamakor.org.il
קבוצה יקרה,
לשיפור ביצועים בצירים הקריטיים במערכת, העברתי חלק משמעותי מהקוד ל- cython.
אמנם השיפור דרמטי, אבל החשש להמשך הוא תחזוק הקוד, unit-tests, דיבאג וכו'.

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

מישהו יכול לשתף מניסיונו?

רועי.

Ram Rachum

unread,
Mar 21, 2019, 11:53:31 PM3/21/19
to Roee Kashi, python-il
שקלת להשתמש ב-pypy? זה נשמע מאוד דומה למה שאתה רוצה.

(עניתי בטעות לקבוצה הלא-נכונה בהודעה הקודמת שלי, פדיחות.)


_______________________________________________
Python-il mailing list
Pyth...@hamakor.org.il
http://hamakor.org.il/cgi-bin/mailman/listinfo/python-il

Roee Kashi

unread,
Mar 22, 2019, 2:27:21 AM3/22/19
to Ram Rachum, python-il
אני כבר עם pypy.
הבעיה שה-JIT לא מספיק טוב במקרה הזה, מאחר ואני ממש מחליף לוגיקה של עבודת IO אינטנסיבית, שינוי ערכים בתוך buffers וכו', אז Cython מאפשר לי פשוט להשתמש במערך אמיתי, שינוי ערכים ללא העתקה שהרבה יותר יעיל מ-memoryview, ופעולות IO ישירות עם system calls בשימוש עם המערך המקורי.
הבעיה העיקרית עם שפות עילית בדכ בהקשרים האלה היא הצורך הבלתי נמנע בהעתקת buffers בתרגום מ-native ל-managed ולהפך.

Matti Picus

unread,
Mar 22, 2019, 3:57:57 AM3/22/19
to pyth...@hamakor.org.il

אם אתה רואה שיפור ביצועיים בשימוש בPYPY ונתקלת בבעיה לשנות תוכן של BUFFER ללא העתקה אפשר להשתמש בCFFI.

אני מופתע ששימוש בBUFFER  או BYTEARRAY לא עוזר, הם נועדו לתת מענה במקרה שאתה מתאר.כאשר אתה קורא IO, אתה עושה READINTO?

אתה יכול לשתף את הקוד שלך?

מתי פיקוס

Roee Kashi

unread,
Mar 22, 2019, 5:46:38 AM3/22/19
to Matti Picus, python-il
משתמש ב-readinto כמובן,
אבל אנסה להרים בנצ'מארק עם CFFI.
אם יעבוד מספיק טוב, זה לגמרי הפתרון המועדף.
אעדכן עם קטעי קוד.
סופש נעים

Tal Einat

unread,
Apr 2, 2019, 3:58:58 AM4/2/19
to Roee Kashi, python-il
היי רועי,

שאלה ממש מעניינת! חשבתי על זה הרבה ולקחתי זמן לעכל את זה...

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

הרעיון המקורי שהצעת, של שפה ייעודית שתאפשר להריץ בערך את אותו קוד ב-Python וב-Cython, נשמע לי בעייתי דווקא מבחינת קלות תחזוקה. הנה כמה סיבות:
1. זה מורכב
2. אין ידע וכלים קיימים שמותאמים לזה
3. קוד שעובד אחרת במצבים שונים הוא מתכון לצרות

אני ממליץ בחום להימנע מזה, ונראה שבמקרה שלך אפשר.

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

מה זה נותן?
1. גבולות ברורים: כאן משתמשים ב-Cython כדי לבנות רכיב מסוים, שאר המערכת בפייתון.
2. רוב המפתחים, רוב הזמן לא יצטרכו להתעסק עם Cython וקומפילציה.
3. תחזוקה קלה יותר לאורך זמן (בעיקר כתוצאה מ-1).

- טל עינת
Reply all
Reply to author
Forward
0 new messages