• דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

JS - הרצת כמה בקשות לגוגל דרייב במקביל

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 2 כותבים 42 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • yossizY מנותק
    yossizY מנותק
    yossiz
    כתב ב נערך לאחרונה על ידי yossiz
    #1

    אני צריך להוריד כמה קבצים מגוגל דרייב (באמצעות קוד) במהירות המירבית שניתן,
    לשם כך אני מנסה להוריד אותם במקביל
    הקוד שלי נראה משהו כזה:

    async function getAllFiles (user, fileIds) {
      let promises = [];
      for (let fileId of fileIds) {
        promises.push(getFile(fileId, user)
          .then(...)
          .catch(...));
      }
      let start = Date.now();
      await Promise.all(promises);
      console.log(`Got contents of all files (${(Date.now() - start) / 1000} seconds)`);
    }
    
    function getFile (fileId, user) {
      return new Promise(async (resolve, reject) => {
        let start = Date.now();
        console.log(`starting to request ${fileId}...`);
        let stream = (await drive.files.get({
          fileId: fileId,
          alt: 'media'
        }, {
          responseType: 'stream'
        })).data;
    
        let chunks = [];
    
        stream.on('data', (chunk) => {
          chunks.push(chunk);
        });
        stream.on('end', () => {
          resolve(Buffer.concat(chunks).toString());
          console.log(`Got contents of ${fileId} (${(Date.now() - start) / 1000} seconds)`);
        });
        stream.on('error', (error) => {
          reject(error);
        });
      });
    }
    

    הייתי מצפה לראות פלט משהו כזה:

    starting to request XXXX...
    starting to request XXXX...
    starting to request XXXX...
    starting to request XXXX...
    starting to request XXXX...
    Got file contents of XXXX (1.44 seconds)
    Got file contents of XXXX (1.538 seconds)
    Got file contents of XXXX (1.542 seconds)
    Got file contents of XXXX (1.692 seconds)
    Got file contents of XXXX (2.013 seconds)
    

    במקום זה, מה שקורה הוא שהבקשה הראשונה תמיד חוזרת לפני ששאר הבקשות מתחילות.

    דוגמה אמיתית:

    starting to request 16C1bmOIBY0w1p1N5_xzibFxOeftTTAAn...
    Got file contents of 16C1bmOIBY0w1p1N5_xzibFxOeftTTAAn (2.538 seconds)
    starting to request 1275GoJZ_fWV0ixQYkeD1N2JvgaKsU6uc...
    starting to request 16-ylnBuzbq7j1knIAKpiWCiYXrJwPinf...
    starting to request 1Hj2O9Z1gom3AYIVGEXeo3rEa9_Lez6IQ...
    starting to request 1gm1M1leAz_SeuEPOq5ST1V6t3DzbJM_R...
    starting to request 1HfPSwA9Cn_-aHHVuTiklOPICDB9Kwqeq...
    Got file contents of 1Hj2O9Z1gom3AYIVGEXeo3rEa9_Lez6IQ (1.44 seconds)
    Got file contents of 1275GoJZ_fWV0ixQYkeD1N2JvgaKsU6uc (1.538 seconds)
    Got file contents of 1HfPSwA9Cn_-aHHVuTiklOPICDB9Kwqeq (1.542 seconds)
    Got file contents of 1gm1M1leAz_SeuEPOq5ST1V6t3DzbJM_R (1.692 seconds)
    Got file contents of 16-ylnBuzbq7j1knIAKpiWCiYXrJwPinf (2.013 seconds)
    Got all file contents (4.66 seconds)
    

    וזה תמיד מה שקורה בלי יוצא מן הכלל
    מה פשר הדבר ומה הפתרון?

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    תגובה 1 תגובה אחרונה
    0
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #2

    החשד המיידי צריך להיות מופנה לdrive.files.get.
    הם בקלות יכולים לממש שזה מטפל כל פעם בבקשה בודדת.

    אפשר ליצור קשר dovid@tchumim.com

    yossizY תגובה 1 תגובה אחרונה
    0
  • yossizY מנותק
    yossizY מנותק
    yossiz
    השיב לdovid ב נערך לאחרונה על ידי yossiz
    #3

    @dovid אבל רק הראשון חוזר לפני שהשאר מתחילים וכל השאר מתחילים וחוזרים במקביל

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    תגובה 1 תגובה אחרונה
    1
  • yossizY מנותק
    yossizY מנותק
    yossiz
    כתב ב נערך לאחרונה על ידי yossiz
    #4

    @dovid
    תודה על ההתייחסות וסליחה על ההטרחה
    זו פשוט היתה שגיאה טפשית שלי בקוד שלי... (חלק של הקוד שלא הבאתי בשאלה, בקיצור שתי לולאות מקוננות, ורק הפנימית הרצתי במקביל והחיצונה סיריאלי... 🤦 )

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    תגובה 1 תגובה אחרונה
    2
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    כתב ב נערך לאחרונה על ידי dovid
    #5

    הגיוני... הייתי מוחק את המילה טפשית, שגיאות זה חלק אינטגרלי מכתיבת קוד אנושית.

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    7

  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.