n초마다 특정 코드 실행
예를 들어, 인쇄하는 방법이 있습니까?Hello World!
n초마다?예를 들어, 프로그램은 내가 가지고 있는 어떤 코드도 통과시키고, 5초가 지나면,time.sleep()
)이 코드를 실행합니다.Hello World를 인쇄하는 것이 아니라 파일을 갱신하는 데 사용합니다.
예를 들어 다음과 같습니다.
startrepeat("print('Hello World')", .01) # Repeats print('Hello World') ever .01 seconds
for i in range(5):
print(i)
>> Hello World!
>> 0
>> 1
>> 2
>> Hello World!
>> 3
>> Hello World!
>> 4
import threading
def printit():
threading.Timer(5.0, printit).start()
print "Hello, World!"
printit()
# continue with the rest of your code
https://docs.python.org/3/library/threading.html#timer-objects
Alex Martelli의 답변을 start()와 stop() 컨트롤로 정리한 주제에 대한 저의 겸손한 견해입니다.
from threading import Timer
class RepeatedTimer(object):
def __init__(self, interval, function, *args, **kwargs):
self._timer = None
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.is_running = False
self.start()
def _run(self):
self.is_running = False
self.start()
self.function(*self.args, **self.kwargs)
def start(self):
if not self.is_running:
self._timer = Timer(self.interval, self._run)
self._timer.start()
self.is_running = True
def stop(self):
self._timer.cancel()
self.is_running = False
사용방법:
from time import sleep
def hello(name):
print "Hello %s!" % name
print "starting..."
rt = RepeatedTimer(1, hello, "World") # it auto-starts, no need of rt.start()
try:
sleep(5) # your long-running job goes here...
finally:
rt.stop() # better in a try/finally block to make sure the program ends!
특징:
- 표준 라이브러리만, 외부 의존관계 없음
start()
그리고.stop()
타이머가 이미 시작 또는 정지되어 있어도 여러 번 콜해도 안전합니다.- 호출되는 함수는 위치 및 명명된 인수를 가질 수 있습니다.
- 변경할 수 있습니다.
interval
언제든지 다음 주행 후에 효과가 있을 것입니다.동일args
,kwargs
그리고 심지어function
!
def update():
import time
while True:
print 'Hello World!'
time.sleep(5)
그것은 함수로 작동될 것이다.그while True:
영원히 작동하게 합니다.필요에 따라 언제든지 기능에서 뺄 수 있습니다.
자신을 정신분열증 증상으로 저장하고 Advanced Python 스케줄러(http://pythonhosted.org/APScheduler를 사용하세요.
코드는 매우 간단합니다.
from apscheduler.scheduler import Scheduler
sched = Scheduler()
sched.start()
def some_job():
print "Every 10 seconds"
sched.add_interval_job(some_job, seconds = 10)
....
sched.shutdown()
다음으로 APScheduler 3.00+와 호환되는 간단한 예를 제시하겠습니다.
# note that there are many other schedulers available
from apscheduler.schedulers.background import BackgroundScheduler
sched = BackgroundScheduler()
def some_job():
print('Every 10 seconds')
# seconds can be replaced with minutes, hours, or days
sched.add_job(some_job, 'interval', seconds=10)
sched.start()
...
sched.shutdown()
또는 다음을 사용할 수 있습니다.대부분의 다른 방법과는 달리 이 타이머는 (코드 실행에 걸리는 시간에 관계없이) n초마다 원하는 코드를 실행합니다.따라서 드리프트를 할 여유가 없다면 이것은 훌륭한 옵션입니다.
import time
from threading import Event, Thread
class RepeatedTimer:
"""Repeat `function` every `interval` seconds."""
def __init__(self, interval, function, *args, **kwargs):
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.start = time.time()
self.event = Event()
self.thread = Thread(target=self._target)
self.thread.start()
def _target(self):
while not self.event.wait(self._time):
self.function(*self.args, **self.kwargs)
@property
def _time(self):
return self.interval - ((time.time() - self.start) % self.interval)
def stop(self):
self.event.set()
self.thread.join()
# start timer
timer = RepeatedTimer(10, print, 'Hello world')
# stop timer
timer.stop()
여기 새로운 스레드가 생성되지 않는 버전이 있습니다.n
초:
from threading import Event, Thread
def call_repeatedly(interval, func, *args):
stopped = Event()
def loop():
while not stopped.wait(interval): # the first call is in `interval` secs
func(*args)
Thread(target=loop).start()
return stopped.set
이벤트는 반복을 중지하기 위해 사용됩니다.
cancel_future_calls = call_repeatedly(5, print, "Hello, World")
# do something else here...
cancel_future_calls() # stop future calls
setInterval python의 현재 구현 개선을 참조하십시오.
5초 동안 카운트하고 파일을 업데이트하고 반복하는 역할만 수행하는 별도의 스레드를 시작할 수 있습니다.이 개별적인 스레드가 메인 스레드에 간섭하는 것을 원치 않을 것입니다.
언급URL : https://stackoverflow.com/questions/3393612/run-certain-code-every-n-seconds
'programing' 카테고리의 다른 글
Larabel 5 관계를 쿼리하면 "null에서 멤버 함수 addEagerConstraints() 호출" 오류가 발생합니다. (0) | 2023.01.21 |
---|---|
날짜 범위로부터 일수를 생성하다 (0) | 2023.01.21 |
사전을 상태 개체로 사용할 때 Vuex + vue가 반응하지 않음 (0) | 2023.01.21 |
VUE 컴포넌트의 mapState에서 "this"를 호출하려면 어떻게 해야 합니까? (0) | 2023.01.01 |
Java에서 어레이를 만드는 방법 (0) | 2023.01.01 |