Jason R. Coombs avatar Jason R. Coombs committed 6b592a3 Merge

Merge with 3.2.x

Comments (0)

Files changed (3)


     # Python 3.2 and earlier
     Timer = threading._Timer
     Event = threading._Event
+# Prior to Python 2.6, the Thread class did not have a .daemon property.
+# This mix-in adds that property.
+class SetDaemonProperty:
+    def __get_daemon(self):
+        return self.isDaemon()
+    def __set_daemon(self, daemon):
+        self.setDaemon(daemon)
+    if sys.version_info < (2,6):
+        daemon = property(__get_daemon, __set_daemon)


 import time
 import threading
-from cherrypy._cpcompat import basestring, get_daemon, get_thread_ident, ntob, set, Timer
+from cherrypy._cpcompat import basestring, get_daemon, get_thread_ident, ntob, set, Timer, SetDaemonProperty
 # _module__file__base is used by Autoreload to make
 # absolute any filenames retrieved from sys.modules which are not
-class BackgroundTask(threading.Thread):
+class BackgroundTask(SetDaemonProperty, threading.Thread):
     """A subclass of threading.Thread whose run() method repeats.
     Use this class for most repeating tasks. It uses time.sleep() to wait
             self.daemon = current_thread().daemon
+        # default to daemonic
+        self.daemon = True
     def cancel(self):
         self.running = False
                 # Quit on first error to avoid massive logs.
-    def _set_daemon(self):
-        return True
 class Monitor(SimplePlugin):
     """WSPBus listener to periodically run a callback in its own thread."""
     "Operating System :: OS Independent",
     "Programming Language :: Python",
     "Programming Language :: Python :: 2",
+    "Programming Language :: Python :: 2.3",
+    "Programming Language :: Python :: 2.4",
+    "Programming Language :: Python :: 2.5",
+    "Programming Language :: Python :: 2.6",
+    "Programming Language :: Python :: 2.7",
     "Programming Language :: Python :: 3",
     "Topic :: Internet :: WWW/HTTP",
     "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.