婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > golang并發下載多個文件的方法

golang并發下載多個文件的方法

熱門標簽:南通如皋申請開通400電話 高德地圖標注口訣 廣州呼叫中心外呼系統 中國地圖標注省會高清 西部云谷一期地圖標注 浙江高速公路地圖標注 學海導航地圖標注 江西轉化率高的羿智云外呼系統 地圖標注的汽車標

背景說明

假設有一個分布式文件系統,現需要從該系統中并發下載一部分文件到本地機器。

已知該文件系統的部分節點ip, 以及需要下載的文件fileID列表,并能通過這些信息來拼接下載地址。

其中節點ip列表保存在xx_node.txt, 要下載的fileID保存在xx_fileID.txt中。

代碼示例

package main

import (
  "bufio"
  "flag"
  "fmt"
  "io"
  "math/rand"
  "net/http"
  "os"
  "time"
)

var (
  clustername = flag.String("clustername", "c1", "download clustername")
)

// 逐行讀取文件內容
func ReadLines(fpath string) []string {
  fd, err := os.Open(fpath)
  if err != nil {
    panic(err)
  }
  defer fd.Close()

  var lines []string
  scanner := bufio.NewScanner(fd)
  for scanner.Scan() {
    lines = append(lines, scanner.Text())
  }
  if err := scanner.Err(); err != nil {
    fmt.Fprintln(os.Stderr, err)
  }

  return lines
}

// 實現單個文件的下載
func Download(clustername string, node string, fileID string) string {
  nt := time.Now().Format("2006-01-02 15:04:05")
  fmt.Printf("[%s]To download %s\n", nt, fileID)

  url := fmt.Sprintf("http://%s/file/%s", node, fileID)
  fpath := fmt.Sprintf("/yourpath/download/%s_%s", clustername, fileID)
  newFile, err := os.Create(fpath)
  if err != nil {
    fmt.Println(err.Error())
    return "process failed for " + fileID
  }
  defer newFile.Close()

  client := http.Client{Timeout: 900 * time.Second}
  resp, err := client.Get(url)
  defer resp.Body.Close()

  _, err = io.Copy(newFile, resp.Body)
  if err != nil {
    fmt.Println(err.Error())
  }
  return fileID
}

func main() {
  flag.Parse()

  // 從文件中讀取節點ip列表
  nodelist := ReadLines(fmt.Sprintf("%s_node.txt", *clustername))
  if len(nodelist) == 0 {
    return
  }

  // 從文件中讀取待下載的文件ID列表
  fileIDlist := ReadLines(fmt.Sprintf("%s_fileID.txt", *clustername))
  if len(fileIDlist) == 0 {
    return
  }

  ch := make(chan string)

  // 每個goroutine處理一個文件的下載
  r := rand.New(rand.NewSource(time.Now().UnixNano()))
  for _, fileID := range fileIDlist {
    node := nodelist[r.Intn(len(nodelist))]
    go func(node, fileID string) {
      ch - Download(*clustername, node, fileID)
    }(node, fileID)
  }

  // 等待每個文件下載的完成,并檢查超時
  timeout := time.After(900 * time.Second)
  for idx := 0; idx  len(fileIDlist); idx++ {
    select {
    case res := -ch:
      nt := time.Now().Format("2006-01-02 15:04:05")
      fmt.Printf("[%s]Finish download %s\n", nt, res)
    case -timeout:
      fmt.Println("Timeout...")
      break
    }
  }
}

小結

下載時沒有用到默認的http Client, 并指定了超時時間;

下載文件時調用了系統調用, goroutine會被掛起;

下載文件完成后會喚醒被掛起的goroutine, 該goroutine執行完后面的代碼后便退出;

全局超時控制,超時后主線程退出。

以上這篇golang并發下載多個文件的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • golang語言實現的文件上傳與文件下載功能示例
  • Golang實現異步上傳文件支持進度條查詢的方法
  • Golang+Android基于HttpURLConnection實現的文件上傳功能示例
  • golang簡單獲取上傳文件大小的實現代碼
  • 如何使用大學教育郵箱下載golang等軟件(推薦)
  • 解決 Golang VS Code 插件下載安裝失敗的問題
  • golang實現http server提供文件下載功能
  • Golang 使用http Client下載文件的實現方法
  • 下載golang.org/x包的操作方法
  • golang實現的文件上傳下載小工具

標簽:貴州 曲靖 吐魯番 許昌 保定 東營 德宏 常州

巨人網絡通訊聲明:本文標題《golang并發下載多個文件的方法》,本文關鍵詞  golang,并發,下載,多個,文件,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang并發下載多個文件的方法》相關的同類信息!
  • 本頁收集關于golang并發下載多個文件的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    在线电影欧美成精品| 琪琪一区二区三区| 精品久久久久久综合日本欧美| 精品国产自在久精品国产| 91久久精品一区二区三区| 成人综合婷婷国产精品久久免费| 韩国午夜理伦三级不卡影院| 日韩不卡一区二区三区 | 国产激情视频一区二区三区欧美 | 国产呦萝稀缺另类资源| 久久99久久99精品免视看婷婷| 日本不卡高清视频| 国内精品久久久久影院色| 国产一区二区免费看| 国产一区二区三区美女| 成人a级免费电影| 99久久久免费精品国产一区二区| 99久久综合色| 欧美色综合网站| 欧美一级欧美一级在线播放| 26uuu精品一区二区在线观看| xvideos.蜜桃一区二区| 国产精品乱人伦一区二区| 亚洲男女毛片无遮挡| 亚洲福利国产精品| 国内一区二区视频| 不卡免费追剧大全电视剧网站| 在线一区二区视频| 精品成a人在线观看| 国产精品美女久久久久久久久久久 | 中文字幕欧美日韩一区| 亚洲色图第一区| 丝袜a∨在线一区二区三区不卡| 人妖欧美一区二区| 99久久久久久| 欧美xingq一区二区| 亚洲国产精品99久久久久久久久| 亚洲乱码国产乱码精品精98午夜 | 国产亚洲午夜高清国产拍精品| 亚洲欧洲韩国日本视频| 另类小说色综合网站| 成人国产精品视频| 精品噜噜噜噜久久久久久久久试看 | 国产在线观看一区二区| 91黄色激情网站| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品二三区| 久久黄色级2电影| 色婷婷亚洲精品| 久久久久国产成人精品亚洲午夜 | 精品一区二区免费视频| 精品播放一区二区| 日本不卡视频在线| 欧美性三三影院| 国产精品免费视频网站| 国产精品一卡二卡| 日韩欧美中文一区二区| 亚洲电影一区二区| 91亚洲精华国产精华精华液| 国产婷婷一区二区| 精东粉嫩av免费一区二区三区| 欧美日韩亚洲不卡| 亚洲国产视频一区二区| 91在线高清观看| 国产精品久久久久婷婷二区次| 九九精品一区二区| 欧美精品一区二区三区蜜桃视频 | 久久精品网站免费观看| 天堂蜜桃91精品| 91九色02白丝porn| 亚洲美女屁股眼交3| www.欧美精品一二区| 中日韩av电影| 成人免费毛片aaaaa**| 欧美国产欧美综合| 国产白丝精品91爽爽久久| 久久伊人中文字幕| 国产一区999| 久久久久久久久久久久电影| 国内精品伊人久久久久影院对白| 日韩精品中文字幕一区| 老司机午夜精品| 久久品道一品道久久精品| 国产精品一区二区黑丝| 国产亚洲欧美一区在线观看| 成人黄色片在线观看| 亚洲欧美激情插 | 国产91高潮流白浆在线麻豆| 国产精品午夜春色av| 不卡av在线免费观看| 亚洲女人小视频在线观看| 一本到一区二区三区| 日韩激情av在线| 日韩精品一区二区三区中文不卡| 九九久久精品视频| 亚洲欧洲日韩在线| 欧美日韩精品久久久| 奇米在线7777在线精品| 精品sm捆绑视频| 成人黄色综合网站| 午夜精品福利一区二区三区av | 自拍偷拍欧美激情| 欧美性色综合网| 国产精品亚洲专一区二区三区| 国产精品久久久久影视| 欧美日韩国产区一| 国产99久久精品| 亚洲成人在线网站| 国产亚洲欧美日韩在线一区| 在线亚洲一区二区| 国产激情视频一区二区在线观看 | 亚洲国产成人一区二区三区| 91啦中文在线观看| 日韩av网站免费在线| 欧美国产在线观看| 88在线观看91蜜桃国自产| 国产成人av一区| 午夜精品福利在线| 中文字幕五月欧美| 久久亚洲综合色| 欧美丝袜自拍制服另类| 国产精品1区2区3区在线观看| 夜夜爽夜夜爽精品视频| 精品理论电影在线观看| 欧美视频在线一区| 99久久综合99久久综合网站| 美女mm1313爽爽久久久蜜臀| 亚洲女同ⅹxx女同tv| 日本一区二区三区四区| 欧美一区二区三区啪啪| 一本大道久久a久久综合| 国产精品白丝jk黑袜喷水| 男女性色大片免费观看一区二区| 亚洲精品成人少妇| 中文字幕乱码久久午夜不卡| 日韩视频国产视频| 91精品国产91久久久久久一区二区| 91视频一区二区三区| 成人网页在线观看| 国产老女人精品毛片久久| 免费成人在线影院| 视频一区中文字幕| 天堂精品中文字幕在线| 亚洲一区二区在线免费观看视频| 亚洲欧洲韩国日本视频| 亚洲国产精品v| 中文字幕av不卡| 日本一区二区免费在线| 国产午夜精品久久| 欧美精彩视频一区二区三区| 欧美mv和日韩mv的网站| 欧美成人a∨高清免费观看| 欧美一级艳片视频免费观看| 欧美一区二区三区日韩视频| 日韩欧美亚洲一区二区| 精品美女在线播放| 久久久影视传媒| 亚洲国产精品ⅴa在线观看| 国产精品乱码人人做人人爱| ...中文天堂在线一区| 亚洲激情一二三区| 天天色综合成人网| 精品一区二区免费视频| 床上的激情91.| 一道本成人在线| 51久久夜色精品国产麻豆| 欧美一级淫片007| 久久只精品国产| 亚洲欧美另类久久久精品 | 国产日韩欧美高清| 亚洲欧洲一区二区在线播放| 亚洲黄色小视频| 免费欧美在线视频| 国产福利电影一区二区三区| 99re66热这里只有精品3直播| 91黄色免费网站| 日韩欧美亚洲另类制服综合在线| 精品粉嫩aⅴ一区二区三区四区| 国产精品区一区二区三区| 一区二区三区自拍| 精品一区二区av| 91麻豆国产精品久久| 日韩欧美一区二区免费| 日本一区二区免费在线| 肉色丝袜一区二区| 成人久久视频在线观看| 欧美精品三级日韩久久| 国产精品丝袜在线| 免费亚洲电影在线| 97se亚洲国产综合自在线不卡 | 最新不卡av在线| 久久精品国产77777蜜臀| 91色视频在线| 久久精品人人做人人爽人人| 亚洲一区二区三区国产| 国产精品白丝jk黑袜喷水| 在线播放一区二区三区| 一区二区三区小说| 成人黄色小视频在线观看| 久久久综合九色合综国产精品|