2016-06-08 1 views
0

파이썬 파일에서 특정 기능을 실행하려고합니다. 그러나 함수를 호출하는 타이머를 사용하여이 메서드를 실행하면 해당 함수가 실행되는 모든 것을 실행하지만 처음부터 작업을 종료합니다. 지정된 시간 후에 함수를 계속 실행해야합니다.일정 시간이 지나면 파이썬 기능을 실행합니다. 그러나 스레딩 타이머를 사용하면 한 번만 실행되고 중지됩니다.

 
    def executor(file): 
     x = datetime.today() 
     y = x.replace(day=x.day, hour=x.hour, minute=x.minute, second=x.second+10, microsecond=0) 
     delta_t = y-x 
     secs = delta_t.seconds+1 
     t = Timer(secs, parse_file, [file]) 
     t.start() 

내가 전화하려고 기능은, parse_file(file_name)입니다 :

는 타이머를 포함하는 기능입니다. executor 함수를 호출 할 때 file_name을 전달합니다.

답변

1

실제 문제가 무엇인지에 대한 세부 정보를 제공하지 않았 으면 어떤 코드를 두 번 이상 실행 하시겠습니까? 실제로이 함수를 호출하는 코드를 표시 할 수 있습니까?

start를 호출하면 주 스레드는 해당 지점에서 계속 실행되지만 예약 한 작업은 지정된 시간에 parse_file 메서드를 호출하고 완료되면 종료됩니다. 나에게 당신이 메인 스레드를 살아있게하는 것을 가지고 있지 않은 것처럼 들린다. (즉, 당신이 executor를 호출 한 후에 더 이상의 코드를 가지고 있지 않다.)

다음은 주 스레드가 작동하는 동안 타이머를 사용하여 작업을 실행하는 방법을 보여주는 작은 예제입니다. 입력을 계속 입력하면 print 명령문은 마지막으로 입력 한 이후에 완료된 모든 스레드를 표시합니다.

from threading import Timer 
import sys 

def scheduled_task(arg): 
    print("\ntask complete arg %s!\n"%(arg)) 

def run_scheduled_task(arg): 
    timer = Timer(10, scheduled_task, [arg]) 
    timer.start() 

done = False 
while not done: 
    user_input = input("Give me some input (exit to stop): ") 
    if user_input == 'exit': 
     print('Exiting') 
     done = True 
    else: 
     run_scheduled_task(user_input)