現在、Windows 環境でマルチスレッド クロールを使用しています。
解析には beautifulsoup lxml を使用しています。
N クロール スレッド -> 解析キュー -> 1 解析スレッド -> ストレージ キュー -> 1 ストレージ スレッド
実行プログラム全体の効率は、計算量の多い解析スレッドに依存するため、解析スレッドの数だけを増やすと、スレッド切り替えのオーバーヘッドが増加し、速度が低下します。
解析効率を大幅に向上させる方法はありますか?
2 つの太ももの指示に従って、使用する準備をします
非同期クローリング -> 解析キュー -> N 解析プロセス -> ストレージ キュー -> ストレージ スレッド
仕事を始める準備ができました
実際、あなたが先に書き直したかと思います
N个爬取线程
可以换成协程/线程池
实现, 因为你在频繁创建线程本省一种性能耗费, 用线程池虽然可以减少这部分的损耗, 但是上下文切换还是无法避免, 所以协程这方面, 应该是比较合适的.1个解析线程
换成进程池
,多开几个进程去计算密集处理, 其余应该可以不用改, 如果还想再搞, 将核心部分用c/c++
、お役に立てれば幸いです私のアプローチはマルチプロセスです。マルチプロセスの利点は、単一マシンのパフォーマンスが十分ではない場合に、いつでも分散クローラに切り替えることができることです。
tornade 非同期クローラーはオンラインで見つけることができます。私はこれを使用しています