1
所以我使用DBM::Deep
共享不同的分叉进程之间的数据。我建立了我的DBM ::深对象是这样的:DBM ::深不明原因的错误
my $todo = DBM::Deep->new(
file => "urls.db",
locking => 1,
autoflush => 1,
type => DBM::Deep->TYPE_HASH
);
但是当我运行我的脚本我似乎得到这些错误:
DBM::Deep: Cannot read sector at 673 in get_bucket_list() at new_forked_crawl.pl line 116
DBM::Deep: '30': Don't know what to do with type '' at new_forked_crawl.pl line 116
DBM::Deep: Cannot read sector at 1188 in get_bucket_list() at new_forked_crawl.pl line 116
DBM::Deep: '65536': Don't know what to do with type '' at new_forked_crawl.pl line 116
Can't locate object method "data" via package "DBM::Deep::Sector::File::BucketList" at /usr/lib/perl5/site_perl/5.8.8/DBM/Deep/Engine/File.pm line 160.
所以所有,但最后一个错误与线做116,但什么是如此离奇的是,线116实际上已经无关,与DBM ::深:
my $pid = fork();
if($pid) { #line 116
push(@forked_children,$pid);
}
#child process, do the work, son!
elsif($pid == 0) {
process_url($todo->{1}->{'urls_hash'}->{$url_id}{'url'},$url_id);
} #end $pid else
所以我知道这是不是很多去,但一直没有人遇到这些错误或一些类似这样?在使用DBM :: Deep方面,我是否缺少某些东西?谢谢!
哇,很好的电话。你是怎么推论的? – srchulo 2012-07-06 20:51:09
使用文件句柄克隆对象是一个常见问题。 – ikegami 2012-07-06 21:43:23