2012-04-05 3 views
0

여러 소스에서 일부 데이터를 추출하는 데 scrapy를 사용하고 있습니다. 실제로는 잘 작동합니다. 이제 거미줄을 작성하여 큰 XML 파일 (약 100MB = 40000 개 항목).거미가 항목 메모리를 해제하지 않습니다.

나는 XMLFeedSpider이라는 치료법을 사용하고 있습니다.

문제는 치료법이 많은 메모리 (1GB 이상)를 사용하고 있으며 내 항목이 사용하는 memomry를 공개하지 않는 이유를 모르겠습니다.

>>> prefs() 
    Libxml2Document      2 oldest: 160s ago 
    CustomName       1 oldest: 163s ago 
    XmlResponse       1 oldest: 161s ago 
    XmlXPathSelector     1 oldest: 0s ago 
    Request        1 oldest: 163s ago 
    CustomName       38893 oldest: 150s ago 

내가 사용할 수있는 모든 항목 파이프 라인을 가지고 :

내가 scrapy의 trackrefs 도구를 사용

나는 다음과 같은 출력을 얻을 수 (텔넷 내 거미에 연결).

내 거미에서는 아이템에 대한 참조를 유지하지 않고 항목을 만들고 반환합니다. 메모리 누수가있는 곳을 찾을 수 없습니다 ...

내 아이템이 출시되지 않은 이유가 있습니까?

+0

치료는 메모리에 항목을 축적하지 않으며 버그가 있다고 판단되는 경우 XMLFeedSpider에서 반환 한 생성기가 목록으로 소비되는 경우를 대비해 스파이더 미들웨어를 확인하십시오. 프로젝트 코드를 표시 할 수 있다면 훨씬 간단합니다. – dangra

답변

0

"prefs"의 출력에 따르면 첫 번째 열은 클래스 이름이고 Scrapy에는 "CustomName"이라는 클래스가 없습니다. 이 이름은 XML 필드의 일부 열과 같습니다. 더 나아가, 이러한 이상한 두 줄을 볼 수있다 :

CustomName       1 oldest: 163s ago 
CustomName       38893 oldest: 150s ago 

은 "다른 클래스,하지만 동일한 이름을 가진"를 의미한다. 코드를 게시해야합니다. Item 클래스의 이름이 "CustomName"인 것으로 추측됩니다.

관련 문제