Heim  >  Fragen und Antworten  >  Hauptteil

Wie kann die Parsing-Effizienz des Python-Crawlers verbessert werden?

Jetzt verwenden wir Multithread-Crawling in der Windows-Umgebung,
benutzen beautifulsoup+lxml zum Parsen.

N Crawling-Threads->Parsing-Warteschlange->1 Parsing-Thread->Speicherwarteschlange->1 Speicher-Thread

Die Effizienz des gesamten Ausführungsprogramms hängt von den rechenintensiven Parsing-Threads ab. Wenn Sie nur die Anzahl der Parsing-Threads erhöhen, erhöht sich der Thread-Umschaltaufwand und die Geschwindigkeit wird verringert.

Entschuldigung, gibt es eine Möglichkeit, die Parsing-Effizienz deutlich zu verbessern?

Bereiten Sie sich gemäß den Anweisungen der beiden Schenkel auf die Verwendung von
Asynchrones Crawlen->Analysewarteschlange->N-Analyseprozesse->Speicherwarteschlange->Speicherthread

vor

Bereit zum Baubeginn

世界只因有你世界只因有你2708 Tage vor738

Antworte allen(3)Ich werde antworten

  • 为情所困

    为情所困2017-06-12 09:22:36

    其实我觉得, 你在前面N个爬取线程 可以换成协程/线程池实现, 因为你在频繁创建线程本省一种性能耗费, 用线程池虽然可以减少这部分的损耗, 但是上下文切换还是无法避免, 所以协程这方面, 应该是比较合适的.
    1个解析线程 换成 进程池,多开几个进程去计算密集处理, 其余应该可以不用改, 如果还想再搞, 将核心部分用c/c++ 重写咯, 希望可以帮到你

    Antwort
    0
  • 怪我咯

    怪我咯2017-06-12 09:22:36

    我的做法是多进程。多进程的好处是当单机性能不够的时候,可以随时切换为分布式爬虫。

    Antwort
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-12 09:22:36

    可以网上找下tornade异步爬虫吧,我正在用这个

    Antwort
    0
  • StornierenAntwort