`
san_yun
  • 浏览: 2663965 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

killable threads

 
阅读更多
## {{{ http://code.activestate.com/recipes/496960/ (r1)
import threading
import ctypes
 
 
def _async_raise(tid, excobj):
    res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(excobj))
    if res == 0:
        raise ValueError("nonexistent thread id")
    elif res > 1:
        # """if it returns a number greater than one, you're in trouble, 
        # and you should call it again with exc=NULL to revert the effect"""
        ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, 0)
        raise SystemError("PyThreadState_SetAsyncExc failed")
 
class Thread(threading.Thread):
    def raise_exc(self, excobj):
        assert self.isAlive(), "thread must be started"
        for tid, tobj in threading._active.items():
            if tobj is self:
                _async_raise(tid, excobj)
                return
        
        # the thread was alive when we entered the loop, but was not found 
        # in the dict, hence it must have been already terminated. should we raise
        # an exception here? silently ignore?
    
    def terminate(self):
        # must raise the SystemExit type, instead of a SystemExit() instance
        # due to a bug in PyThreadState_SetAsyncExc
        self.raise_exc(SystemExit)
## end of http://code.activestate.com/recipes/496960/ }}}

分享到:
评论

相关推荐

    开源项目-icholy-killable.zip

    开源项目“icholy-killable.zip”是一个由icholy创建并分享的代码库,它引入了一个名为Killable的概念,这个概念受到了tomb项目的启发。在软件开发中,尤其是在并发编程和长时间运行的服务中,能够优雅地取消或停止...

    android低内存管理策略

    ### Android低内存管理策略详解 #### 一、Android内存管理概览 Android操作系统以其高度定制化和优化的特性,尤其在资源有限的移动设备上表现出色。其内存管理机制是确保系统流畅运行的关键之一。...

    Android系统重启问题的归类

    OOM(Out Of Memory)导致的panic:当系统内存资源耗尽,内核无法找到可杀进程时,会触发“Kernel panic - not syncing: Out of memory and no killable processes...”。这类问题通常与内存管理有关,可能涉及某些...

    linux mutex.c 内核源码分析

    - 锁的竞争和等待机制:`mutex_lock_interruptible()`、`mutex_lock_killable()`以及`mutex_lock_nested()`。 - 锁的公平性和死锁预防策略。 通过对`mutex.c`的深入理解,我们可以更好地掌握Linux内核中的同步和...

    信号量与自旋锁

    `down_interruptible()`和`down_killable()`提供了额外的信号处理能力,前者会在收到中断信号时返回,而后者则允许内核在进程睡眠时将其终止。 3. **释放信号量**:使用`up()`函数来释放信号量,增加信号量的值,...

    Android Lifecycle for application developers Guidelines and Tips

    文档还介绍了一些额外的关键概念,如“可杀性”(Being “Killable”)、回调处理和ANRs、`onPause()`与`onStop()`的区别等。 - **可杀性**:指应用程序在某些情况下可能会被系统终止,以释放资源供其他应用使用。...

Global site tag (gtag.js) - Google Analytics