Hatena::Groupangelos

Angelos in Action RSSフィード

Fork me on GitHub
 | 

2009-07-20

CPAN::PackagerでCoro

11:42 | CPAN::PackagerでCoro - Angelos in Action を含むブックマーク はてなブックマーク - CPAN::PackagerでCoro - Angelos in Action CPAN::PackagerでCoro - Angelos in Action のブックマークコメント

analyze_dependenciesのところをcoroで非同期化する場合の話。A moduleがP, Qに依存していたとして、Pの依存関係解析スレッドの途中で、Qの解析にうつったとしても、Pの解析結果とQの解析結果には何の関係性もない(重複する物があれば、skipできるものが増えるくらい)ので、副作用は無い。pre-emptiveなスレッドでもないので、現状のcpan-packagerでは、少なくともanalyze_dependencies部分はconfig(データ構造)のデータのlockを考える必要はなさそう。

依存関係の多いモジュールダウンロードが並列化されるので、かなり早くなりそうだなぁという印象。現状のコードでの問題としては、再帰的にdependencyを解決しているので、解決するモジュールによっては、coroオブジェクト数がかなり増える(スレッド数がかなり増える)可能性があるということ。ここは、並列で投げるリクエストを制限するためにsemaphoreでcoroオブジェクト数を制限する必要があるかなぁと。

# File::Fetchで以下のエラーが表示されるなぁ。hmm. なんでこうなるのかは、また後で調査。

[info] Downloading HTTP::Server::Simple ...
Could not dup 'STDIN': 無効な引数です at /usr/lib/perl5/site_perl/5.8.8/File/Fetch.pm line 640
Could not restore 'STDIN': 無効な引数です at /usr/lib/perl5/site_perl/5.8.8/File/Fetch.pm line 640
Could not dup 'STDIN': 無効な引数です at /usr/lib/perl5/site_perl/5.8.8/File/Fetch.pm line 966
Could not restore 'STDIN': 無効な引数です at /usr/lib/perl5/site_perl/5.8.8/File/Fetch.pm line 966
Could not dup 'STDIN': 無効な引数です at /usr/lib/perl5/site_perl/5.8.8/File/Fetch.pm line 714
Could not restore 'STDIN': 無効な引数です at /usr/lib/perl5/site_perl/5.8.8/File/Fetch.pm line 714
[ERROR] Fetching of 'http://ftp.nara.wide.ad.jp/pub/CPAN/authors/id/J/JE/JESSE/CHECKSUMS' failed: Command failed: 

# デバッグしてみたところ、File::Fetch::BLACKLISTの値がftpになっているのが原因でした。うーむ、DependencyAnalyzerで上書きしてるはずなんだけどなぁ...

# File::FetchとCoroの組み合わせはだめっぽいなぁ。どこが動かないか調べるのは結構だるそうな感じ...

 |