סטרים בפייתון
-
כ'בוגר' NodeJS, שכל הזמן כותב בהזרמות, די הופתעתי לראות שהנושא בכלל לא מוסדר בפייתון. לא הצלחתי למצוא ברשת מדריך איך יוצרים הזרמה בפייתון.
מתשובה בסטאק-אוברפלואו היה נראה שצריך לייצר את הכל לבד.מישהו יודע משהו על הנושא?
מה אני מנסה לעשות:
אני מנסה לעשות הזרמה של קלט מMySQLDump, לGzip כדי לכווץ, ומשם להעלאה לשרת כלשהו.אציין כי הכל (קבלת הקלט -> דחיסה -> העלאה) חייב לקרות בבת אחת, כי הגודל הכולל הוא לפחות 7 GB, ואני לא רוצה עומסים על הזיכרון או הדיסק קשיח.
הצלחתי להזרים לGzip עם קומבינה מסובכת:
io = io.BytesIO() # אובייקט שמחזיק את הצ'אנק i = 0 out_file = open("backup.sql", "wb") # הדמייה של האובייקט שיקלוט את הנתונים with gzip.GzipFile("backup.sql", "wb", fileobj=io) as w_gz: for chank in iter(lambda: f.read(chank_size), b''): # לולאת ההזרמה w_gz.write(chank) # כיווץ w_gz.flush() i += chank_size out_file.write(io.getvalue()) # העתקת הצ'אנק המכווץ io.seek(0) # מחיקת הצ'אנק מהאובייקט הזמני io.truncate(0)
נראה לי מאוד פרימיטיבי ולא מוצלח.
בעיקר שב-NodeJS כל זה קורה בשורה אחת.source.pipe(zlib).pipe(destination)
מישהו יודע משהו יותר?
ומעכשיו אני JSניק שרוף יותר...
מצפה מאוהדי פייתון לבוא ולהגן, כי אחרת...