Python libSpotifySDK:加载播放列表时超时

Python libSpotifySDK:加载播放列表时超时,python,spotify,libspotify,Python,Spotify,Libspotify,我使用libSpotify 12.1.51(linux-libc6 x86_64)和pyspotify从python向spotify发出请求 我们已经使用这段代码很长时间了,但是几周前突然出现了超时。每次尝试加载播放列表时,都会出现超时(我尝试了许多播放列表) 下面是一些复制问题的代码: import spotify import logging import os class SpotifyClient(object): def __init__(self): con

我使用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
调试:spotify.session:通知主线程 调试:spotify。会话:来自spotify的日志消息:16:18:40.516 E[ap:4172]频道错误(0,1,播放列表) 调试:spotify。会话:通知主线程 调试:spotify。播放列表:播放列表状态已更改 调试:spotify。会话:通知主线程 调试:spotify。会话:通知主线程 调试:spotify。会话:通知主线程 调试:spotify。会话:通知主线程 调试:spotify。会话:通知主线程 调试:spotify。会话:通知主线程 回溯(最近一次呼叫最后一次): 文件“x.py”,第27行,在 client.load_playlist('spotify:user:melek136:playlist:32Gl8vkJmvJCHejGTEgM1t') 加载播放列表中第20行的文件“x.py” self.playlist.load(超时=20) 文件“/home/entura/env/lib/python2.7/site packages/spotify/playlist.py”,第103行,已加载 返回utils.load(self,timeout=timeout) 加载文件“/home/entura/env/lib/python2.7/site packages/spotify/utils.py”,第222行 提升spotify.Timeout(超时) spotify.error.Timeout:操作未在20.000秒内完成
libspotify本身没有加载播放列表的超时时间。事实上,在一个完美的风暴条件下(没有本地缓存、大帐户、播放列表服务运行缓慢),加载播放列表可能需要很多分钟

我对libspotify的Python绑定不太熟悉,但是这里肯定引入了超时。因此,要解决这个问题:

  • 增加超时值

  • 完全删除超时(或者,我猜,将其设置为一个疯狂的高数字)

  • 有时Spotify播放列表服务的一天很糟糕,速度会立即变慢或完全停止。如果您正在制作的应用程序是面向用户的,那么您应该告诉用户播放列表正在加载,并将其保留在当前位置,而不是出错


    至于时间安排,很可能是缓存被破坏,导致libspotify需要更多时间加载播放列表。也许你正在加载的播放列表非常接近超时,现在它们触发了超时。也许您的libspotify连接正被负载平衡到比以前更远离您的物理位置的Spotify服务器。除了删除缓存外,您不能影响这些操作。

    谢谢您的回答。缓存位于文件系统(Linux)的何处,以便我可以删除它?另外-我尝试了10000秒的超时,但仍然达到了超时。(我确实得到了Notify main thread)整个期间的回调,但它永远不会返回:(缓存位于您告诉它去的任何地方-它是libspotify的init方法的参数。这可能相关吗?