2014-03-19 3 views
0

어디서나 이런 종류의 질문을 찾지 못했기 때문에 여기에서 질문 할 것입니다.x 시간 동안 함수가 호출되지 않았는지 확인

나를 작성한 특정 기능이 x 시간 동안 호출되지 않았는지 어떻게 확인할 수 있습니까?

def myfun(): 
    myfun.last_called = datetime.now() 
    # … do things 

이 시점부터이 함수가 호출되었을 때 쉽게 알 수 있어야 :

+1

당신은 * 어떤 * 임의의 함수 또는 당신이 작성하는 특정 일을 의미? – kojiro

+0

Sorry.Specific 함수가 저에게 씁니다. – Satoshi

답변

2

당신은 함수 정의의 마지막이라는 시간을 포함 할 수있다. 호출 될 때마다 last_called 타임 스탬프가 업데이트됩니다.

더 일반적인 방법은 속성을 연결하는 함수 장식을 정의하는 것입니다 : 그런

def remembercalltimes(f, *args, **kwargs): 
    """A decorator to help a function remember when it was last called.""" 
    def inner(*args, **kwargs): 
     inner.last_called = datetime.now() 
     return f(*args, **kwargs) 
    return inner 

@remembercalltimes 
def myfun(): 
    # … do things 

>>> myfun() 
>>> myfun.last_called 
>>> datetime.datetime(2014, 3, 19, 11, 47, 5, 784833) 
+0

고마워요! 1 개의 함수에 여러 개의 데코레이터를 사용할 수 있습니까? – Satoshi

+0

@Satoshi 일반적으로 데코레이터는 대개 동일하거나 유사한 시그니처가있는 함수를 반환하기 때문입니다. 그러나 진정한 대답은 * 의존합니다. 데코레이터는 함수의 성질을 완전히 바꿀 수 있고, 심지어 비 - 함수를 반환 할 수도 있기 때문에 다음 데코레이터는 그걸로 무엇을해야할지 모른다. – kojiro

0
import time 
last_time_f_called = time.time() 

def f(): 
    global last_time_f_called 
    now = time.time() 
    time_since = now - last_time_f_called 
    last_time_f_called = now 
    # do whatever you wanted to do about value of time_since 

뭔가?

당신이 많이 싶었던 물건의 종류가 있다면 당신은 아마, 키는 함수 이름이었다 DICT에 번 업데이트 데코레이터에 그것을 포장 할 수 ...

+0

오른쪽 변수 대신 전역 변수 대신에 함수의 값으로'last_time_f_called' 값을 넣기를 원한다는 것을 제외하고는. – kojiro

+0

@kojiro 예, 깨끗합니다. – scav

0

이는 것 같아 함수의 __dict__에있는 정보를 장식하기 위해 합리적인 시간을 가졌습니다.

def lastcalled(func): 
    def inner(): 
     from datetime import datetime 
     then = func.__dict__.get('lastcalled') 
     diff = int((datetime.now() - then).total_seconds()) if then else None 
     print('Last called: {}'.format('{} sec ago'.format(diff) if diff else 'Never')) 
     func() 
     func.lastcalled = datetime.now() 
    return inner 

데모 :

@lastcalled 
def f(): 
    print('printing in f()') 

f() 
Last called: Never 
printing in f() 

#wait 5 seconds 

f() 
Last called: 5 sec ago 
printing in f() 
관련 문제