
240
12
章 ビッグデータ
12.2.3
内部で行われていること
jugはどのように動いているのでしょうか? 基本的にはとてもシンプルです。タスクは関数と引数か
ら構成されています。引数は値か他のタスクのどちらかを取ります。もし、あるタスクが他のタスクを
引数に取れば、その二つのタスク間には依存関係が作られます(一つ目のタスクの結果が準備されるま
では、二つ目のタスクは実行できません)。
上記の内容に基づき、各タスクのためのハッシュを再帰的に計算していきます。ハッシュとは、そこ
に辿り着くまでに計算した全作業をエンコードして、数値化したものです。
jug execute
を実行した
とき、次のコードに示すような簡単なループ処理が行われています。
for t in alltasks:
if t.has_not_run() and not backend_has_value(t.hash()):
value = t.e
xecute()
save_to_backend(value, key=t.hash())
実際のループ処理では、並列処理のロック問題のため、より複雑になりますが、基本的なアイデア
は上のコードに示した通りです。
キャッシュデータは、標準ではハードディスク(
jugfile.jugdata/
という名前のディレクトリ)
にファイルとして書き込まれます。また、他の選択肢としてRedisデータベースを用いることも可能で
す。
適切なロッキング処理をjug が行うことで、複数のプロセッサ上でタスクを実行する ...