From 8ee30179eae3b6697629aad50ca31df9daa5ef6e Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Fri, 20 Apr 2012 15:19:56 -0700 Subject: [PATCH] Add _use_daemons flag to XMLStream to run all threads in daemon mode. This WILL make the Python interpreter produce exceptions on shutdown. --- sleekxmpp/xmlstream/scheduler.py | 3 ++- sleekxmpp/xmlstream/xmlstream.py | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/sleekxmpp/xmlstream/scheduler.py b/sleekxmpp/xmlstream/scheduler.py index 8ec73164..6f6e0278 100644 --- a/sleekxmpp/xmlstream/scheduler.py +++ b/sleekxmpp/xmlstream/scheduler.py @@ -121,7 +121,7 @@ class Scheduler(object): #: Lock for accessing the task queue. self.schedule_lock = threading.RLock() - def process(self, threaded=True): + def process(self, threaded=True, daemon=False): """Begin accepting and processing scheduled tasks. :param bool threaded: Indicates if the scheduler should execute @@ -130,6 +130,7 @@ class Scheduler(object): if threaded: self.thread = threading.Thread(name='scheduler_process', target=self._process) + self.thread.daemon = daemon self.thread.start() else: self._process() diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index 891f275a..c5c8581b 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -282,6 +282,7 @@ class XMLStream(object): self.__event_handlers = {} self.__event_handlers_lock = threading.Lock() self.__filters = {'in': [], 'out': [], 'out_sync': []} + self._use_daemons = False self._id = 0 self._id_lock = threading.Lock() @@ -1206,10 +1207,11 @@ class XMLStream(object): else: threaded = kwargs.get('threaded', True) - self.scheduler.process(threaded=True) + self.scheduler.process(threaded=True, daemon=self._use_daemons) def start_thread(name, target): self.__thread[name] = threading.Thread(name=name, target=target) + self.__thread[name].daemon = self._use_daemons self.__thread[name].start() for t in range(0, HANDLER_THREADS): @@ -1451,6 +1453,7 @@ class XMLStream(object): name="Event_%s" % str(func), target=self._threaded_event_wrapper, args=(func, args)) + x.daemon = self._use_daemons x.start() else: func(*args)