⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 watcher.py

📁 tinyos2.0版本驱动
💻 PY
字号:
# Copyright (c) 2006-2007 Chad Metcalf <chad@5secondfuse.com>## Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"),# to deal in the Software without restriction, including without limitation# the rights to use, copy, modify, merge, publish, distribute, sublicense,# and/or sell copies of the Software, and to permit persons to whom the# Software is furnished to do so, subject to the following conditions:## The above copyright notice and this permission notice shall be included in# all copies or substantial portions of the Software.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE# SOFTWARE.## Author: Chad Metcalf <chad@5secondfuse.com>#import osimport sysimport signalfrom tinyos.utils.Singleton import Singletonclass Watcher(Singleton):    """ As seen in:    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496735        This class solves two problems with multithreaded    programs in Python, (1) a signal might be delivered    to any thread (which is just a malfeature) and (2) if    the thread that gets the signal is waiting, the signal    is ignored (which is a bug).    The watcher is a concurrent process (not thread) that    waits for a signal and the process that contains the    threads.  See Appendix A of The Little Book of Semaphores.    http://greenteapress.com/semaphores/    """        def __init__(self):        """ Creates a child thread, which returns.  The parent            thread waits for a KeyboardInterrupt and then kills            the child thread.        """          Singleton.__init__(self)                self.child = os.fork()        if self.child != 0:            self.watch()    def watch(self):        try:            os.wait()        except KeyboardInterrupt:            # I put the capital B in KeyBoardInterrupt so I can            # tell when the Watcher gets the SIGINT            print 'KeyBoardInterrupt'            self.kill()        sys.exit()    def kill(self):        try:            os.kill(self.child, signal.SIGKILL)        except OSError, x:             print "os.kill failed"            print x

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -