2017-03-05 2 views
1

나는 내 산딸기 파이 3에서 실행할 코디 애드온을 만들고있다. 내 addon에서 나는 항목 목록을 채울 수 있도록 웹 사이트에서 정보를 긁었다. 나는 지금 당장 가지고있는 모든 일을하고 있지만, 제 라스베리 파이 3에 그것을 배치하면 성능이 문제가됩니다. 웹 페이지가Beautifulsoup4 performance raspberry pi3

soup = BeautifulSoup(response, "html.parser", parse_only=tiles) << this line 

이미 성능을 향상시키기 위해 soupstrainer를 사용하지만이 내가 기대했다 미치는 영향이 없었을 구문 분석하기 전에 15 초 정도 걸립니다.

_VRT_BASE = "https://www.vrt.be/" 

    def __list_videos_az(self): 
    joined_url = urljoin(self._VRTNU_BASE_URL, "./a-z/") 
    response = urlopen(joined_url) 
    tiles = SoupStrainer('a', {"class": "tile"}) 
    soup = BeautifulSoup(response, "html.parser", parse_only=tiles) 
    listing = [] 
    for tile in soup.find_all(class_="tile"): 
     link_to_video = tile["href"] 
     li = self.__get_item(tile, "false") 
     url = '{0}?action=getepisodes&video={1}'.format(_url, link_to_video) 
     listing.append((url, li, True)) 

    xbmcplugin.addDirectoryItems(_handle, listing, len(listing)) 
    xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE) 
    xbmcplugin.endOfDirectory(_handle) 

def __get_item(self, element, is_playable): 
    thumbnail = self.__format_image_url(element) 
    found_element = element.find(class_="tile__title") 
    li = None 
    if found_element is not None: 
     li = xbmcgui.ListItem(found_element.contents[0] 
           .replace("\n", "").strip()) 
     li.setProperty('IsPlayable', is_playable) 
     li.setArt({'thumb': thumbnail}) 
    return li 

누군가 프로그램의 성능을 향상시키는 방법을 알려주시겠습니까? 나는 어쩌면 정규식이 더 빠를 것이라고 사람들은 생각하지 못했다. 사람들은 이런 방식으로 html을 파싱해서는 안되며, 정규 표현식을 함께 사용하는 것은 어렵다.

내 성능을 향상시킬 수있는 방법이 있습니까?

답변

1

lxml parser은 C (Cython 실제로)로 작성되었으며 일반적으로 더 빨리 시도하는 것이 좋습니다. 이 패키지를 얻으려면 Raspbian (apt-get install python-lxml 또는 pip install lxml)에서 설치 한 다음 addon으로 옮깁니다. lxml 패키지에는 컴파일 된 바이너리 모듈이 포함되어 있으므로 특정 플랫폼에 맞는 버전을 얻는 것이 중요합니다.

+0

답변 주셔서 감사합니다. 이미 lxml 파서를 살펴 보았지만 작동시키기가 어려웠습니다. 그러나 나는 결국 타이밍을 바꾼 것으로 생각한다. 근근이를하는 데는 3 초와 for 루프가 필요하다. 내가 가장 빠른 것이되어야한다고 생각하는 정규식을 작성했기 때문에? 그리고 결국 나는 listitem을 많이 추가하기 때문에 여전히 느리다. 나는 버그 # 17304 http://trac.kodi.tv/ticket/17304와 관련 있다고 생각한다. 이제 나는 프로그램/테스트 이전에 librelec에 대한 업데이트를 기다리고 있습니다. (다른 사람이 말한 것처럼 addon.py에서 더 많은 코드를 분리했다.) – Martijn

+0

''lxml '로 직접 작업하는 것이 아니라, BeautifulSoup 4의 트리 빌더/파서로 사용하는 것이었다. 정규식은 권장하지 않는다. 복잡한 html 파싱. 버그는 Kodi 개발팀이 해결하도록했습니다. –

+0

아쉽군! 그리고 내 산딸기 파이에 그것을 배포 할려면 kodi 17.1 빌드와 함께 libreelec의 새 버전이 필요합니다. – Martijn

0

하나의 파일로만 의심되는가요? 우선 주 파일에서 해당 코드를 옮기는 것이 좋습니다. 일반적인 guidline은 addon.xml이 컴파일러에 의해 캐시되지 않는 유일한 파일이기 때문에 가능한 최소한으로 참조하는 파일을 유지하는 것입니다.

관련 문제