付録B: 詳細なトラブルシューティング

よくあるエラーと解決法

メモリ関連エラー

# エラー: MemoryError
# 解決法: チャンク処理の実装
def process_large_file_chunked(filename, chunk_size=10000):
    """大規模ファイルのチャンク処理"""
    results = []
    
    with open(filename, 'r') as f:
        chunk = []
        for line in f:
            chunk.append(line.strip())
            
            if len(chunk) >= chunk_size:
                # チャンクの処理
                result = process_chunk(chunk)
                results.append(result)
                chunk = []
        
        # 最後のチャンク
        if chunk:
            results.append(process_chunk(chunk))
    
    return results

並列処理のデッドロック

# エラー: デッドロック発生
# 解決法: タイムアウトとリトライの実装
import concurrent.futures
import time

def safe_parallel_execution(tasks, max_workers=4, timeout=60):
    """安全な並列実行"""
    results = []
    failed_tasks = []
    
    with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
        # タスクを投入
        future_to_task = {
            executor.submit(task): task for task in tasks
        }
        
        # 結果を収集
        for future in concurrent.futures.as_completed(future_to_task, timeout=timeout):
            task = future_to_task[future]
            try:
                result = future.result(timeout=10)
                results.append(result)
            except concurrent.futures.TimeoutError:
                failed_tasks.append(task)
                print(f"Task timed out: {task}")
            except Exception as e:
                failed_tasks.append(task)
                print(f"Task failed: {task}, Error: {e}")
    
    # リトライ処理
    if failed_tasks:
        print(f"Retrying {len(failed_tasks)} failed tasks...")
        # 実装省略
    
    return results

数値精度の問題

# エラー: 数値オーバーフロー/アンダーフロー
# 解決法: 対数空間での計算
import numpy as np

def stable_probability_computation(values):
    """数値的に安定な確率計算"""
    # 対数空間での計算
    log_values = np.log(values + 1e-300)  # ゼロ除算回避
    
    # LogSumExp トリック
    max_val = np.max(log_values)
    log_sum = max_val + np.log(np.sum(np.exp(log_values - max_val)))
    
    # 正規化された確率
    log_probs = log_values - log_sum
    probs = np.exp(log_probs)
    
    return probs

← 前へ: 環境構築ガイド 目次に戻る 次へ: パフォーマンス最適化 →