2017-03-05 4 views
1

私はラズベリーpi3で実行するコディアドオンを作っています。 私のアドオンでは、私はアイテムのリストを埋めることができるように、私はウェブサイトからの情報をこすります。私が今持っているものはすべて動作していますが、私がラズベリーパイ3に展開すると、パフォーマンスが問題になります。 Webページは、私はすでに、パフォーマンスを向上させるためにsoupstrainerを使用しますが、これは私が望んでいた影響力を持っていなかったBeautifulsoup4パフォーマンスラズベリーpi3

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

を解析される前に、それは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)からインストールしてから、アドオンに移動してください。 lxmlパッケージにはコンパイルされたバイナリモジュールが含まれているため、特定のプラットフォーム用のバージョンを入手することが重要です。

+0

答えてくれてありがとう、私は既にlxmlパーサを見てみましたが、動作させるのが難しいと感じました。しかし、私は最終的に私はタイミングを切り替えると思う、掻き集めるには3秒とforループ15がかかります。私は私が一番速くなければならないと思う正規表現をまとめました。そして、私はリスト項目をたくさん追加しているので、それはまだ遅いです。私はバグ#17304 http://trac.kodi.tv/ticket/17304に関連していると思います。今私はプログラム/テストより前にlibrelecのアップデートを待っています。 (他の人が言ったように、addon.pyからさらに多くのコードを分けて) – Martijn

+0

'' lxml'を直接使って作業するわけではありませんでした。私はBeautifulSoup 4のツリービルダー/パーサとして使うことを意味しました。複雑なhtml解析のために。バグはKodi開発チームが修正するためのものです。 –

+0

それを考慮してください!私のラズベリーパイに展開するには、kodi 17.1ビルドでlibreelecの新しいバージョンが必要です – Martijn

0

ファイルが1つしかないと思われますか?最初のことは、おそらくあなたのメインファイルからそのコードを移動することでしょう。一般的なguidlineは、addon.xmlがコンパイラによってキャッシュされない唯一のファイルであるため、可能な最小値を参照しているファイルを保持することです。

関連する問題