今日は一日、とあるプログラムに費やしました。が、結論から言うと、ぜーんぜん、動きませんでした。ダメでした、やり方がまるで。ということで、全然別の方法を考えなければならなくなってしまいました。トホホ。一日かけて、ダメなことを立証することになってしまいました。あぅぅ。
プログラムは、リアルタイムデータベースから、刻々と変化するデータを拾い出して、他のモジュールから使えるようにする……という perlのモジュールです。リアルタイムデータベースからデータを拾い出すモジュールは、社内で用意されたものがあるのでソレを利用する方針で、但し、こいつは、イベントドリブンなデザインで、ループをなしてしまうので、他のモジュールから利用するためには、ループを別のプロセスなりスレッドなりに分離しないといけないのです。そういう処理と、あとは、APIをカプセル化してモジュールにするという、TipicalなOOPです。
分離したループをなし、データを拾い続けるプロセスと、プログラム本体から呼び出されるAPI部とは、pipeを使って通信し、API側から要求があったことは、シグナルで通知するという方針でデザインを開始。つまり、
kill USR1 => $pid;
my $result = <$in>;
こうして、ガリガリとコードを書き上げて、いざ、テストを開始すると、プロセスの分離などはうまくいったものの、肝心の命令が伝わりません。そう、問題のループ……これは社内製のモジュールの中で作られているものなのですが、要するにこの人、シグナルを受け付けないように作ってくれてあるようでした、トホ。KILLなら通るんですが、それはハンドラで拾えないですから、使い物になりません。こんな基本的な話は、がりがりコードを書く前に調べておくべきでした。とほほ oTL
コメント