Dont modify a list as you are traversing it. The result is

implementation dependant although with CPython elements are
unintentionally skipped during iteration.

Basic CPython example:

>>> A = [1,2,3,4,5,6]
>>> for a in A:
...     A.remove(a)
>>> A
[2, 4, 6]
This commit is contained in:
Chuddah 2020-02-16 18:41:14 +00:00
parent 94456ddcd8
commit 85d4e660ef
2 changed files with 5 additions and 8 deletions

View file

@ -131,11 +131,10 @@ class Library(threading.Thread):
Start new "daemon threads" to process library updates. Start new "daemon threads" to process library updates.
(actual daemon thread is not supported in Kodi) (actual daemon thread is not supported in Kodi)
''' '''
for threads in (self.download_threads, self.writer_threads['updated'], self.download_threads = [thread for thread in self.download_threads if not thread.is_done]
self.writer_threads['userdata'], self.writer_threads['removed']): self.writer_threads['updated'] = [thread for thread in self.writer_threads['updated'] if not thread.is_done]
for thread in threads: self.writer_threads['userdata'] = [thread for thread in self.writer_threads['userdata'] if not thread.is_done]
if thread.is_done: self.writer_threads['removed'] = [thread for thread in self.writer_threads['removed'] if not thread.is_done]
threads.remove(thread)
if not self.player.isPlayingVideo() or settings('syncDuringPlay.bool') or xbmc.getCondVisibility('VideoPlayer.Content(livetv)'): if not self.player.isPlayingVideo() or settings('syncDuringPlay.bool') or xbmc.getCondVisibility('VideoPlayer.Content(livetv)'):

View file

@ -147,9 +147,7 @@ class Artwork(object):
def add_worker(self): def add_worker(self):
for thread in self.threads: self.threads = [thread for thread in self.threads if not thread.is_done]
if thread.is_done:
self.threads.remove(thread)
if self.queue.qsize() and len(self.threads) < 2: if self.queue.qsize() and len(self.threads) < 2: