저는 약 1 주일 동안이 질문에 어려움을 겪었습니다. 몇 분 안에 대답을 부를 수있는 사람에게 물어볼 시간입니다.기존 루프를 종료하지 않고 작업을 예약하는 방법은 무엇입니까?
저는 10 초마다 한 번씩 파이썬 프로그램을 실행하려고합니다. 이 이런 종류의 질문을 많이 있습니다 작동합니다 sched
또는 time.sleep
를 사용하여 Use sched module to run at a given time, Python threading.timer - repeat function every 'n' seconds, 일반적으로 솔루션 How to execute a function asynchronously every 60 seconds in Python?
은,하지만 난 이미 while False
루프에서 실행되는 cmd2
내에서 예약 프로세스를 시작하려합니다 . (cmd2
을 종료하면이 루프가 종료됩니다.)
이 때문에 10 초마다 반복되는 기능을 시작하면 cmd2
내에 중첩 된 다른 루프를 입력하고 cmd2
명령을 입력 할 수 없습니다. 함수를 반복하는 하위 루프를 끝내면 cmd2
으로 돌아갈 수 있으며 따라서 함수는 반복을 중지합니다.
분명히 스레딩이이 문제를 해결합니다. 나는 성공하지 않고 threading.Timer
을 시도했다. 아마도 진짜 문제는 스레드 또는 다중 처리를 이해하지 못한다는 것입니다.
import cmd2
import repeated
class prompt(cmd2.Cmd):
"""this lets you enter commands"""
def default(self, line):
return cmd2.Cmd.default(self, line)
def do_exit(self, line):
return True
def do_repeated(self, line):
repeated.func_1()
repeated.py는 다음과 같습니다 :
다음 내가 일을하는 데sched
모듈을 사용하여, 내가 사용하는 코드와 거의 동형 코드의 예입니다
import sched
import time
def func_2(sc):
print 'doing stuff'
sc.enter(10, 0, func_2, (sc,))
def func_1():
s = sched.scheduler(time.time, time.sleep)
s.enter(0, 0, func_2, (s,))
s.run()
감사합니다. 저는 큐를 알지 못했습니다. 내가 원하는 것을 할 수있는 것처럼 보입니다. 그러나, 나는 threading.Timer (그것을 사용하는 답변의 수를 판단하는 선호되는 방법입니다)와 간단한 방법을 발견하고 그것을 아래에 설명했습니다. – Wapiti