python-mpd2 icon indicating copy to clipboard operation
python-mpd2 copied to clipboard

Add Mutex for MPD commands

Open arne123 opened this issue 3 years ago • 0 comments

I need thread safety for python-mpd2, therefore I added a method to my class and wrap all calls to mpd over the method below. This seems to work ok (except that I have trouble to catch the Connection Error, but this is a different story)

Now I wanted to do this a little bit more pythonic. I was thinking about inheriting the MPDClient class and overwrite either the mpd_commands(object): decorator or the mpd_command_provider(cls): decorator incorporating the mutex below.

Would one of these methods be the be the right approach?

Does one have an other proposal?

    def mpd_retry_with_mutex(self, mpd_cmd, params=None):
        retry = 2
        with self.mpd_mutex:
            while retry:
                try:
                    if params is None:
                        ret = mpd_cmd()
                    else:
                        ret = mpd_cmd(params)
                    break
                except ConnectionError:
                    if retry:
                        retry -= 1
                        self.connect()
                    else:
                        ret = {}
                        break
            return ret

arne123 avatar May 31 '21 21:05 arne123