3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UrlFetchApp.fetchAllもタイムアウトで使えない

Posted at

前回タイムアウトの待ち時間が設定できず、トリガーの時間浪費が厳しいと書きました。

そこで、UrlFetchApp.fetchAllを使って並列でリクエストを送ることにしました。
これなら全部タイムアウトしても最悪値ひとつだけの時間消費で済むはずと考えたからです。

UrlFetchApp.fetchAllが並列であることは解説していただいているのでよいとして、タイムアウトしたときの処理はよくわかりませんでした。

  // スプレッドシートで管理している監視先情報の取得
  var infoObj = JSON.parse(getData(SERVER_SHEET_NAME))
  
  var requests = []
  infoObj.map(function(row) {
    requests.push({
      url: row.URL,
      method: 'get',
      muteHttpExceptions: true,
    })
  })
  try {
    var responses = UrlFetchApp.fetchAll(requests);
  } catch(e) {
    Logger.log(e)
  }
  Logger.log(responses)

requestsの中には接続できないURLが含まれています。

結論として、
タイムアウトで例外が発生し、responsesが空だった
というのが軽い検証の結果でした。

仮にこれが真だとすると、ひとつでもコケる可能性があるURLがあると他の正常なリクエストも巻き添えで死ぬため、
そういった場合はfetchAllではなくfetchループのほうがマシな可能性まで生まれるんじゃないかと思います。

頻繁に死ぬようなURLを短時間にチェックする方法がやはり異端かな。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?