From 8cc9440847c0942dc5e6595274615506b820e6d4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 16 Oct 2013 13:53:17 +0530 Subject: [PATCH] Move join_with_timeout into the utils module --- src/calibre/gui2/library/alternate_views.py | 13 +------------ src/calibre/utils/__init__.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/calibre/gui2/library/alternate_views.py b/src/calibre/gui2/library/alternate_views.py index 75178b09a7..44c361e129 100644 --- a/src/calibre/gui2/library/alternate_views.py +++ b/src/calibre/gui2/library/alternate_views.py @@ -8,7 +8,6 @@ __copyright__ = '2013, Kovid Goyal ' import itertools, operator, os from types import MethodType -from time import time from threading import Event, Thread from Queue import LifoQueue from functools import wraps, partial @@ -23,6 +22,7 @@ from PyQt4.Qt import ( from calibre import fit_image, prints, prepare_string_for_xml from calibre.ebooks.metadata import fmt_sidx +from calibre.utils import join_with_timeout from calibre.gui2 import gprefs, config from calibre.gui2.library.caches import CoverCache, ThumbnailCache from calibre.utils.config import prefs, tweaks @@ -482,17 +482,6 @@ class CoverDelegate(QStyledItemDelegate): return True return False -def join_with_timeout(q, timeout=2): - q.all_tasks_done.acquire() - try: - endtime = time() + timeout - while q.unfinished_tasks: - remaining = endtime - time() - if remaining <= 0.0: - raise RuntimeError('Waiting for queue to clear timed out') - q.all_tasks_done.wait(remaining) - finally: - q.all_tasks_done.release() # }}} # The View {{{ diff --git a/src/calibre/utils/__init__.py b/src/calibre/utils/__init__.py index 48f75c0428..ae68ee3b9b 100644 --- a/src/calibre/utils/__init__.py +++ b/src/calibre/utils/__init__.py @@ -7,3 +7,19 @@ __docformat__ = 'restructuredtext en' Miscelleaneous utilities. ''' +from time import time + +def join_with_timeout(q, timeout=2): + ''' Join the queue q with a specified timeout. Blocks until all tasks on + the queue are done or times out with a runtime error. ''' + q.all_tasks_done.acquire() + try: + endtime = time() + timeout + while q.unfinished_tasks: + remaining = endtime - time() + if remaining <= 0.0: + raise RuntimeError('Waiting for queue to clear timed out') + q.all_tasks_done.wait(remaining) + finally: + q.all_tasks_done.release() +