2013-03-24 3 views
1

Python에서 이벤트를 예약하는 간단한 예제를 찾을 수 없습니다.python sched 모듈과 enterabs를 사용하여 특정 시간에 함수가 실행되도록

날짜/시간 문자열을 함수의 인수로 전달할 수 있기를 원합니다. 예를 들어

:

문자열 : 미래의 기능을 실행하는 코드가 실행 된 후, "m/D/Y MM HH"는 시간을 설정할 것이다. 그래서, 나는 그것을 실행 한 후 사라지기를 기다리는 함수처럼.

문자열을 올바르게 포맷하는 것이 주된 문제인 것처럼 보이지만 간단한 예제는 실행하는 기능을 '예약하는'방법을 실제로 이해하는 데 도움이됩니다.

답변

2

큰 프레임에서 무엇을하려하는지 이해할 수있는 문맥은 충분하지 않지만 일반적으로 말하자면 "이것은 파이썬에서 어떻게 작동하는지"입니다.

"일반"Python 프로그램은 단일 스레드 동기식 프로그램입니다. 하나의 작업을 실행하고, 다른 작업이 끝난 후, 모든 작업이 끝나고, 프로그램이 종료되고, 인터프리터가 종료됩니다.

때문에, (가상의 "예약"기능)를 따라 뭔가 :

def main(): 
    print("Hello World") 
    schedule(60, main) 

main() 

예약 할 수있는 호출은 즉시 반환 할 경우, 파이썬에서 작동하지 않을 것입니다 - 주요 기능은 종료 것이며,이 프로그램은 것 main() 호출 후 다시 시작하고 종료하십시오. 실행 시간을 계산할 수있는 코드 조각이 있어야하며, 지연이 발생하면 네트워크 또는 사용자 생성 이벤트를 수신하고 프로그램을 계속 실행하기 위해 미리 정렬 된 콜백 함수로 전달해야합니다.

시간과 디스패치 호출을 설명 할 수있는 이러한 코드는 일반적으로 "반응기"라고하며 보통의 Python 프로그램에서는 실행되지 않습니다. 말하자면, 브라우저 나 다른 자바 스크립트 환경이 기본적으로 호스팅을 제공하는 자바 스크립트 프로그램과는 다릅니다. 이다

이유는 대부분의 파이썬 웹 또는 네트워크 프레임 워크, 모든 GUI 툴킷, 같은 코어를 제공 - 그것은 일반적으로 하나의 주의 스크립트의 끝에서 호출 등 mainloop 또는 serve_forever, start 및라는 방법 또는 기능입니다 . 그 시점부터 적절한 콜백, 예정된 일 등을 설정 한 주요 스크립트가 중지됩니다. 리액터는 코드를 호출하는 코드 일 것입니다.

당신의 질문이 당신이 원하는 것에 대한 문맥을 놓친다 : 처음에는 일정을 테스트하기를 원하지만 이후에는 더 큰 시스템 내부에서 그 시스템을 원할 것이다. 웹 서버 시스템 인 경우 장고, 토네이도, 피라미드, GUI 프로그램 인 경우 gtk, Qt, Tk, Pygre, kivy, 멀티미디어 프로그램 인 경우 pyglet과 같이 손에 들고있는 "실제 작업"을위한 프레임 워크 , 다른 프로토콜의 일반 네트워크 서버 또는 셀러리 또는 camaelia와 같은 다른 일부의 경우 트위스티드 - 이것은 일반적인 예일뿐입니다.

즉, Python의 표준 라이브러리는 "일반"스케줄러 기능을 제공합니다. 기능의 핵심을 포함하여 이러한 루프를 구현합니다. 당신이 아무것도하지 않고 공상에 들지 않는다면, 예정된 기능을 호출 할 시점에 도달 할 때까지 거기에서 차단되어 종료 할 것이며, 주 프로그램에 대한 제어를 재개합니다. 호출 된 함수가 다른 일을 스케줄하면 계속 실행됩니다.당신 대신 당신이 요청으로 R 절대 타이밍을 설정하기로 time.time의 날짜 모듈에서 기능을 사용할 수 있습니다 http://docs.python.org/2/library/sched.html

:

은 문서 및 예를 참조하십시오. 또한 threading.Timer에 문서를 확인하십시오 - 순진한 방법으로 당신이 염두에두고있는 것을 더 많거나 적게 할 수 있습니다. 만약 당신이 주어진 지연 후에 간단한 함수를 실행하고 싶다면, 다른 코드가 실행 중일 때와 병행하여, 이벤트 기반이되도록 응용 프로그램을 다시 작성하려고 합니다만, 더 큰 시스템에서는 많은 단점을 갖기 때문에 더 간단합니다. 나열된 프레임 워크 중 하나를 선택해야합니다.

관련 문제