From fe57342448dd72231f94a6d8de12795376a65a63 Mon Sep 17 00:00:00 2001 From: John Goerzen Date: Tue, 5 Aug 2008 00:05:29 -0500 Subject: [PATCH] Yet another Python threading workaround. module threading should be taken out back and shot. Condition.wait() is a busywait loop that has negative implications for battery consumption on laptops. Queue.get() in blocking mode blocks SIGINT from being delivered. Argh, argh, argh. Closes: #493801. --- offlineimap/threadutil.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/offlineimap/threadutil.py b/offlineimap/threadutil.py index 5f53708..f1df5b2 100644 --- a/offlineimap/threadutil.py +++ b/offlineimap/threadutil.py @@ -18,8 +18,8 @@ from threading import * from StringIO import StringIO -from Queue import Queue -import sys, traceback, thread +from Queue import Queue, Empty +import sys, traceback, thread, time from offlineimap.ui import UIBase # for getglobalui() profiledir = None @@ -89,7 +89,7 @@ class threadlist: # Exit-notify threads ###################################################################### -exitthreads = Queue(5) +exitthreads = Queue(100) inited = 0 def initexitnotify(): @@ -112,8 +112,14 @@ def exitnotifymonitorloop(callback): """ global exitthreads while 1: # Loop forever. - callback(exitthreads.get(True)) - exitthreads.task_done() + try: + thrd = exitthreads.get(False) + print "exitnotifymonitorloop: Got thread\n" + callback(thrd) + print "exitnotifymonitorloop: callback done\n" + exitthreads.task_done() + except Empty: + time.sleep(1) def threadexited(thread): """Called when a thread exits."""