10.

処理を一定時間待つ

編集
この記事の要点
  • 処理を一定時間待つ方法(言語別)
  • JavaScript: await new Promise(r => setTimeout(r, 1000))
  • Java: Thread.sleep(1000) (ミリ秒)
  • Python: time.sleep(1) (秒)
  • PHP: sleep(1) / usleep(1000000)
  • シェル: sleep 1

 

JavaScript

// async/await で待機(推奨)
async function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function main() {
    console.log("start");
    await delay(1000);  // 1 秒待つ
    console.log("after 1s");
    await delay(500);   // 0.5 秒待つ
    console.log("done");
}

// setTimeout (コールバック形式)
setTimeout(() => {
    console.log("after 1s");
}, 1000);

// setInterval (繰り返し)
const id = setInterval(() => {
    console.log("every 1s");
}, 1000);
clearInterval(id);  // 停止

// 同期的に待つ (ブロッキング、非推奨)
function sleepSync(ms) {
    const start = Date.now();
    while (Date.now() - start < ms) {}
    // ブラウザがフリーズするので開発時のみ
}

Java

// Thread.sleep (ミリ秒)
try {
    Thread.sleep(1000);  // 1 秒
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
    throw new RuntimeException(e);
}

// TimeUnit
TimeUnit.SECONDS.sleep(1);
TimeUnit.MINUTES.sleep(5);
TimeUnit.MILLISECONDS.sleep(500);

// Java 9+ Duration
TimeUnit.MILLISECONDS.sleep(Duration.ofSeconds(1).toMillis());

// 非同期で遅延実行
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(() -> System.out.println("after 1s"), 1, TimeUnit.SECONDS);
executor.shutdown();

// CompletableFuture
CompletableFuture.runAsync(() -> System.out.println("Hello"))
    .thenRunAsync(() -> System.out.println("After delay"),
                  CompletableFuture.delayedExecutor(1, TimeUnit.SECONDS));

Python

import time

# 同期 sleep (秒単位)
time.sleep(1)        # 1 秒
time.sleep(0.5)      # 0.5 秒
time.sleep(60)       # 1 分

# 非同期 asyncio
import asyncio

async def main():
    print("start")
    await asyncio.sleep(1)  # 1 秒
    print("after 1s")

asyncio.run(main())

# threading でスケジュール
import threading
def delayed():
    print("after 2s")
threading.Timer(2, delayed).start()

PHP

シェル / Bash

# 秒単位
sleep 1
sleep 60   # 1 分
sleep 1h   # 1 時間
sleep 30m  # 30 分

# 小数も OK (GNU coreutils)
sleep 0.5
sleep 1.5

# Windows コマンドプロンプト
timeout /t 5

# PowerShell
Start-Sleep -Seconds 5
Start-Sleep -Milliseconds 500

Ruby

# 秒単位
sleep(1)
sleep(0.5)

# クラスメソッドとしても
Kernel.sleep(2)

C# / .NET

// 同期
Thread.Sleep(1000);  // ミリ秒
Thread.Sleep(TimeSpan.FromSeconds(1));

// 非同期
await Task.Delay(1000);
await Task.Delay(TimeSpan.FromSeconds(1));

Go

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println("start")
    time.Sleep(time.Second)
    time.Sleep(500 * time.Millisecond)
    time.Sleep(2 * time.Minute)
    fmt.Println("done")
}

典型的な用途

① リトライ間隔

// JS: 指数バックオフ
async function fetchWithRetry(url, maxRetries = 3) {
    for (let i = 0; i < maxRetries; i++) {
        try {
            const response = await fetch(url);
            if (response.ok) return response;
        } catch (e) {
            // 失敗
        }
        const delayMs = Math.min(1000 * Math.pow(2, i), 30000);  // 1s, 2s, 4s, 8s, ... max 30s
        await new Promise(r => setTimeout(r, delayMs));
    }
    throw new Error("All retries failed");
}

② ポーリング

// Python: ジョブ完了を待機
import time
import requests

while True:
    response = requests.get("/api/job/123/status").json()
    if response["status"] == "completed":
        print("Done")
        break
    elif response["status"] == "failed":
        print("Failed")
        break
    time.sleep(2)  # 2 秒ごとに確認

③ レート制限

// API 呼び出しを 1 秒に 1 回に制限
async function batchProcess(items) {
    for (const item of items) {
        await callApi(item);
        await new Promise(r => setTimeout(r, 1000));  // 1 秒待つ
    }
}

注意点

  • 同期 sleep はブロッキング: スレッド・プロセスが完全停止する
  • UI スレッド禁止: ブラウザ・GUI アプリで使うと固まる
  • 非同期版を使う: 言語が対応していれば async / await 推奨
  • InterruptedException: Java では sleep が割り込まれることがある
  • 精度: ms 以下は OS 依存、ナノ秒精度は保証されない

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. スクリプトの作成と実行
  2. C# のクラス一覧
  3. シーンの移動方法
  4. オブジェクトの移動・回転
  5. キーボードの入力値を受け取る
  6. オブジェクトの取得とコンポーネントの取得
  7. 衝突時の処理
  8. Webページを開く
  9. コンポーネントの取得
  10. 処理を一定時間待つ
  11. コンソールへのログ出力方法
  12. 飛行機の加速と減速
  13. ジェットエンジンのエフェクトとオーディオ