付録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
← 前へ: 環境構築ガイド | 目次に戻る | 次へ: パフォーマンス最適化 → |