[Bf-extensions-cvs] [b2353d73] master: BlenderKit cleanup and minor fix in new search code thumbnail download threads
Vilem Duha
noreply at git.blender.org
Wed Jul 28 09:56:43 CEST 2021
Commit: b2353d73af928f537af3b59b8ed1290d5f31bf88
Author: Vilem Duha
Date: Tue Jul 27 17:16:44 2021 +0200
Branches: master
https://developer.blender.org/rBAb2353d73af928f537af3b59b8ed1290d5f31bf88
BlenderKit cleanup and minor fix in new search code thumbnail download threads
===================================================================
M blenderkit/search.py
===================================================================
diff --git a/blenderkit/search.py b/blenderkit/search.py
index 6bbbac7f..e797314d 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -674,15 +674,17 @@ def thumb_download_worker(queue_sml, queue_full):
# utils.p('start thumbdownloader thread')
while 1:
session = None
- #start a session only for single search usually.
+ #start a session only for single search usually, if users starts scrolling, the session might last longer if
+ # queue gets filled.
if not queue_sml.empty() or not queue_full.empty():
- session = requests.Session()
-
+ if session is None:
+ session = requests.Session()
while not queue_sml.empty():
+ #first empty the small thumbs queue
url, filepath = queue_sml.get()
download_image(session,url, filepath)
exit_full = False
- # download full resolution image, but only if no small thumbs are waiting.
+ # download full resolution image, but only if no small thumbs are waiting. If there are small
while not queue_full.empty() and queue_sml.empty():
url, filepath = queue_full.get()
download_image(session,url, filepath)
@@ -690,41 +692,9 @@ def thumb_download_worker(queue_sml, queue_full):
if queue_sml.empty() and queue_full.empty():
if session is not None:
session.close()
+ session = None
time.sleep(.5)
-class ThumbDownloader(threading.Thread):
-
- def __init__(self, url, path, session):
- super(ThumbDownloader, self).__init__()
- self.url = url
- self.path = path
- self.session = session
- self._stop_event = threading.Event()
-
- def stop(self):
- self._stop_event.set()
-
- def stopped(self):
- return self._stop_event.is_set()
-
- def run(self):
- # print('thumb downloader', self.url)
- # utils.p('start thumbdownloader thread')
- r = None
- try:
- r = self.session.get(self.url, stream=False)
- except Exception as e:
- bk_logger.error('Thumbnail download failed')
- bk_logger.error(str(e))
- if r and r.status_code == 200:
- with open(self.path, 'wb') as f:
- f.write(r.content)
- # ORIGINALLY WE DOWNLOADED THUMBNAILS AS STREAM, BUT THIS WAS TOO SLOW.
- # with open(path, 'wb') as f:
- # for chunk in r.iter_content(1048576*4):
- # f.write(chunk)
- # utils.p('end thumbdownloader thread')
-
def write_gravatar(a_id, gravatar_path):
'''
@@ -1265,7 +1235,6 @@ def add_search_process(query, params):
if thumb_workers_sml == []:
for a in range(0, 8):
- # worker = ThumbDownloadWorker(thumb_sml_download_threads, thumb_full_download_threads)
thread = threading.Thread(target=thumb_download_worker, args=(thumb_sml_download_threads, thumb_full_download_threads),
daemon=True)
thread.start()
More information about the Bf-extensions-cvs
mailing list