문제

최대 500 개의 스레드와 각 스레드가 기본적으로 원격 서버에서 제공되는 특정 데이터를 요청하는 웹 크롤러 스크립트는 각 서버의 답변이 다른 서버의 답변과 크기가 다릅니다.

스레드 용 756K로 stack_size를 설정하고 있습니다

threading.stack_size(756*1024)

이를 통해 충분한 수의 스레드가 필요하고 대부분의 작업 및 요청을 완료 할 수 있습니다. 그러나 일부 서버의 응답은 다른 서버의 응답보다 크고 스레드가 그런 종류의 응답을 얻을 때 Sigsegv와 함께 스크립트가 죽습니다.

STACK_SICES 756K 이상의 크기로 인해 필요한 수의 스레드를 동시에 가질 수 없습니다.

주어진 stack_size를 충돌없이 어떻게 계속할 수 있습니까? 주어진 스레드의 현재 중고 stack_size를 어떻게 얻을 수 있습니까?

도움이 되었습니까?

해결책

지구상에서 500 개의 스레드를 산란하고 있습니까? 그것은 끔찍한 생각처럼 보입니다!

나사산을 완전히 제거하고 이벤트 루프를 사용하여 크롤링을 수행하십시오. 귀하의 프로그램은 더 빠르고 간단하며 유지 관리가 더 쉽습니다.

네트워크를 기다리는 많은 스레드가 프로그램을 만들지 않습니다. 더 빨리 기다립니다. 대신 목록에 모든 열린 소켓을 수집하고 데이터를 사용할 수 있는지 확인하는 루프를 실행하십시오.

사용하는 것이 좋습니다 꼬인 - 이벤트 중심 네트워킹 엔진입니다. 매우 구부러지고 안전하며 확장 가능하며 안정적입니다 (segfaults 없음).

당신은 또한 볼 수 있습니다 스크레이프 - 파이썬/트위스트로 작성된 웹 크롤링 및 스크린 스크래핑 프레임 워크입니다. 여전히 개발 중이지만 아이디어를 몇 가지 생각할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top