2011-07-07 4 views
0

私はモジュールを使用していると思う:HTML::グラバーperlでHTMLを解析します。私の主なプロセスでそれを使用するだけで動作しますが、スレッディングで使用しようとするとエラーになります。Perlメソッド "parse_html_string"を呼び出すことはできませんまたは参照をunbless

は具体的に、私は、

Thread 1 terminated abnormally: Can't call method "parse_html_string" 
on unblessed reference at /usr/local/ActivePerl-5.10/site/lib/HTML/Grabber.pm line 79. 

どこグラバー・オブジェクトの作成をこのエラーを得ました。

$mech->get($link); 
$dom = HTML::Grabber->new(html => $mech->content); #at this point 

どのようにこの奇妙な問題を解決するためのアイデアですか?

答えて

1

parse_html_stringメソッドは、XML::LibXMLパーサーオブジェクトで呼び出されます。

XML::LibXMLは、スレッドの混在をサポートしているようだ:

おそらく何が起こっているHTML::Grabberあるそれはメインスレッドでスクリプトによってインポートされたときに、パーサーオブジェクトを作成しています。その後、子スレッドを作成し、XML::LibXMLはスレッド間でクローンを作成しないので、オブジェクトは消えます。実行後のスレッドのロード後に、HTML::Grabberの実行時負荷をrequireとする必要があります。

これが当てはまらない場合は、問題を小さな例に煮詰めて、ここにコードを掲載する必要があります。

+0

私はMS Windowsを使用していません。私はMAC OSを使用しています。さらに、私はそれが単一のプロセスでは動作しますが、スレッドでは動作しないと言いました。 – REALFREE

+0

申し訳ありませんが、スレッドの部分は見逃しました。 –

関連する問題