>  Q&A  >  본문

Python 크롤러의 구문 분석 효율성을 향상시키는 방법은 무엇입니까?

이제 Windows 환경에서는 멀티스레드 크롤링을 사용합니다.
구문 분석에는 beautifulsoup+lxml을 사용합니다.

N 크롤링 스레드->파싱 큐->파싱 스레드 1개->저장 큐->저장 스레드 1개

전체 실행 프로그램의 효율성은 계산 집약적인 구문 분석 스레드에 갇혀 있습니다. 구문 분석 스레드 수만 늘리면 스레드 전환 오버헤드가 증가하고 속도가 느려집니다.

죄송합니다. 구문 분석 효율성을 크게 향상시킬 수 있는 방법이 있나요?

두 허벅지의 지시에 따라
비동기 크롤링->파싱 큐->N 파싱 프로세스->스토리지 큐->스토리지 스레드

를 사용할 준비를 합니다.

공사 시작 준비

世界只因有你世界只因有你2686일 전715

모든 응답(3)나는 대답할 것이다

  • 为情所困

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

    사실 님이 먼저 다시 작성하신 것 같은데N个爬取线程 可以换成协程/线程池实现, 因为你在频繁创建线程本省一种性能耗费, 用线程池虽然可以减少这部分的损耗, 但是上下文切换还是无法避免, 所以协程这方面, 应该是比较合适的.
    1个解析线程 换成 进程池,多开几个进程去计算密集处理, 其余应该可以不用改, 如果还想再搞, 将核心部分用c/c++ 도움이 되셨으면 좋겠습니다

    회신하다
    0
  • 怪我咯

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

    내 접근 방식은 다중 프로세스입니다. 다중 프로세스의 장점은 단일 머신의 성능이 충분하지 않을 때 언제든지 분산 크롤러로 전환할 수 있다는 것입니다.

    회신하다
    0
  • 淡淡烟草味

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

    온라인에서 Tornade 비동기 크롤러를 찾을 수 있는데 저는 이것을 사용하고 있습니다

    회신하다
    0
  • 취소회신하다