【问题标题】:libSpotifySDK : Timeout when loading playlistlibSpotifySDK:加载播放列表时超时
【发布时间】:2014-09-24 16:34:35
【问题描述】:

我正在使用 libSpotify 12.1.51 (linux-libc6 x86_64) 和 pyspotify 从 python 发出 spotify 请求。

我们已经使用此代码很长时间了,但几周前突然出现超时。每次我尝试加载播放列表时,都会超时(我尝试过很多播放列表)

这里有一些复制问题的代码:

import spotify
import logging
import os

class SpotifyClient(object):
    def __init__(self):
        config = spotify.Config()
        config.load_application_key_file(filename=os.path.join(os.path.dirname(os.path.abspath(__file__)), 'spotify_appkey.key'))
        if spotify.session_instance:
            self.session = spotify.session_instance
        else:
            self.session = spotify.Session(config=config)
        if not self.session.connection_state == spotify.ConnectionState.LOGGED_IN:
            self.session.login('OUR_USERNAME', 'OUR_PASSWORD')
        while not self.session.user:
            self.session.process_events()

    def load_playlist(self, playlist_uri):
       self.playlist = spotify.Link(playlist_uri).as_playlist()
       self.playlist.load(timeout=20)

if __name__ == '__main__':

   logging.basicConfig(level=logging.DEBUG)

   client = SpotifyClient()
   client.load_playlist('spotify:user:melek136:playlist:32Gl8vkJmvJCHejGTEgM1t')

播放列表只是我从我正在尝试的列表中随机选择的一个。

以下是输出到控制台的内容:

DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Log message from Spotify: 16:18:40.516 E [ap:4172] ChannelError(0, 1, playlist)
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.playlist:Playlist state changed
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
Traceback (most recent call last):
File "x.py", line 27, in <module>
    client.load_playlist('spotify:user:melek136:playlist:32Gl8vkJmvJCHejGTEgM1t')
File "x.py", line 20, in load_playlist
    self.playlist.load(timeout=20)
File "/home/entura/env/lib/python2.7/site-packages/spotify/playlist.py", line 103, in load
    return utils.load(self, timeout=timeout)
File "/home/entura/env/lib/python2.7/site-packages/spotify/utils.py", line 222, in load
    raise spotify.Timeout(timeout)
spotify.error.Timeout: Operation did not complete in 20.000s

【问题讨论】:

标签: python spotify libspotify


【解决方案1】:

libspotify 本身没有加载播放列表的超时时间。事实上,在完美风暴条件下(没有本地缓存​​、大帐户、播放列表服务运行缓慢),加载播放列表可能需要几分钟时间。

我并不精通 libspotify 的 Python 绑定,但这里肯定会引入超时。所以,修复它:

  1. 增加超时值

  2. 完全取消超时(或者,我猜,设置一个疯狂的高数字)

有时 Spotify 播放列表服务会遇到糟糕的一天,并且会立即变慢或完全停止运行。如果您正在制作的应用程序是面向用户的,您应该只告诉用户播放列表正在加载并将其留在原处而不是出错。

至于时间,您的缓存可能已损坏,这导致 libspotify 需要更多时间来加载播放列表。也许您正在加载的播放列表非常接近超时,现在它们触发了它。也许您的 libspotify 连接正在负载平衡到比以前更远离您的物理位置的 Spotify 服务器。除了删除缓存之外,您不能影响任何这些事情。

【讨论】:

  • 感谢您的回答。缓存位于文件系统 (Linux) 上的什么位置以便我可以删除它?另外 - 我尝试了 10000 秒的超时,它仍然达到超时。 (我确实收到通知主线程)整个期间的回调,但它永远不会返回:(
  • 缓存位于你告诉它去的任何地方——它是 libspotify 的 init 方法的参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2013-11-15
  • 1970-01-01
  • 2015-04-29
  • 2014-03-05
  • 1970-01-01
相关资源
最近更新 更多