我有一个python脚本,其中有多个threading
启动的线程,其中几个线程偶尔会冻结(显然是同时冻结)。在这个脚本中,我注册了一个信号处理程序来转储所有运行线程的堆栈跟踪。当它冻结时,不会出现倾倒的堆积物。是什么原因造成的?你知道吗
我想到了几个可能性:
mutex
,冻结任何其他试图获取它的线程。不过,在这种情况下,我希望信号处理程序能正常工作。我弄错了吗?你知道吗stdout
和stderrr
,它们通过bash命令行重定向到日志文件。也许来自两个线程的精确定时输出可能会在操作系统级别阻塞?这个脚本已经运行了几个月没有问题,尽管最近有一个内核更新(它是ubuntu12.04)。如果是这样,信号不会被忽略,只是不会产生任何输出。。。你知道吗
Python的
signal
模块专门在主解释器线程上运行信号处理程序。如果主线程挂起并且无法执行Python代码,则信号处理程序将不会运行。信号将被激发和捕获,但是如果线程不能执行Python代码,那么什么也不会发生。你知道吗避免这种情况的最佳方法是确保主线程(启动时存在于Python解释器中的第一个线程)不会死锁。这可能意味着要确保初始化后该线程上不会发生任何重要的事情。你知道吗
相关问题 更多 >
编程相关推荐