python使用signal模組編寫超時處理

2021-10-25 06:20:07 字數 1325 閱讀 8971

***寫了乙個超時處理指令碼,主要用來超時處理nfs服務掛死的情況,如果檢測到掛載超時,就會執行sys.exit(1)報錯退出:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import os,os.path,sys,commands,signal,time

class mountexcepition(exception):

def __init__(self,value):

self.value = value

def __str__(self):

return repr(self.value)

#設定命令超時

class timeoutexception(exception):

pass

def settimeout(num, callback):

def wrape(func):

def handle(signum, frame):

raise timeoutexception("執行超時!")

def todo(*args, **kwargs):

try:

signal.signal(signal.sigalrm, handle)

signal.alarm(num)#開啟鬧鐘訊號

rs = func(*args, **kwargs)

signal.alarm(0)#關閉鬧鐘訊號

return rs

except timeoutexception, e:

callback()

return todo

return wrape

if __name__ == '__main__':

def dosome():

sys.exit(1)

@settimeout(8,dosome)

#nfs服務檢查函式

def check_task():

try:

cmd = "ls -l /nfs_5580_check"

(status,output) = commands.getstatusoutput("%s" %cmd)

if status != 0:

raise mountexcepition(output)

except mountexcepition as e:

print "fail"

sys.exit(1)

else:

print "success"

check_task()

python 訊號處理模組signal

signal包負責在python程式內部處理訊號,典型的操作包括預設訊號處理函式,暫停並等待訊號,以及定時發出sigalrm等。要注意,signal包主要是針對unix平台 比如linux,mac os 而windows核心中由於對訊號機制的支援不充分 signal包定義了各個訊號名及其對應的整數,...

Python 訊號處理 signal 模組

官方文件上有這樣的示例 import signal,os 定義乙個訊號處理函式,該函式列印收到的訊號,然後raise ioerror def handler signum,frame print signal handler called with signal signum raise ioerr...

Python訊號處理模組signal

python中對訊號處理的模組主要是使用signal模組,但signal主要是針對unix系統,所以在windows平台上python不能很好的發揮訊號處理的功能。要檢視python中的訊號量,可以使用dir signal 來檢視。在signal模組中,主要是使用signal.signal 函式來預...