매분마다 작업이 시작되도록 예약하려고합니다. 나는 특정 작업에 예약 된 작업을 시작하려는APScheduler 작업이 예정대로 시작되지 않습니다.
from scheduler import scheduler
scheduler.start()
:
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
executors = {
'default': ThreadPoolExecutor(10),
'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
'coalesce': False,
'max_instances': 5
}
scheduler = BackgroundScheduler(executors=executors,job_defaults=job_defaults)
이 같은 모듈의 __init__.py
에서 스케줄러를 초기화 : 나는 scheduler.py
스크립트에 정의 된 스케줄러를 가지고 같은 :
def AddJob():
dbid = repository.database.GetDbid()
job_id = 'CollectData_{0}'.format(dbid)
scheduler.scheduled_job(func=TestScheduler(),
trigger='interval',
minutes=1,
id=job_id
)
def TestScheduler():
for i in range(0,29):
starttime = time()
print "test"
sleep(1.0 - ((time() - starttime) % 1.0))
첫째 : 내가 파이썬 콘솔에서 AddJob()
기능을 실행하고있을 때 그것은 R로 시작 예상대로 작동하지만 백그라운드에서는 작동하지 않으면 콘솔은 30 초 후에 TestScheduler
기능이 종료 될 때까지 차단됩니다. 백그라운드 스케줄러이기 때문에 백그라운드에서 실행되기를 기대하고있었습니다.
둘째 : 반복 간격을 1 분으로 지정해도 작업이 다시 시작되지 않습니다.
무엇이 누락 되었습니까?
UPDATE
나는 다른 스레드에 문제 덕분에 발견했다. 잘못된 줄은 이것이다 :
scheduler.add_job(func=TestScheduler,
trigger='interval',
minutes=1,
id=job_id
)
TestScheduler()가된다 TestScheduler :
scheduler.scheduled_job(func=TestScheduler(),
trigger='interval',
minutes=1,
id=job_id
)
나는 그것을 변경했습니다. TestScheduler()를 사용하면 TestScheduler() 함수의 결과가 add_job()의 인수로 전달됩니다.
추가 내 게시물에 대한 해결책이 당신의 추천에 따라 내 init.py에서 scheduler.start()를 제거. 이미 실행중인 경우 또한 스케줄러를 다시 시작 피하기 위해 절을 추가 : scheduler.running하지 않을 경우 : scheduler.start() 감사를 –
좋은 당신이 대답 : –
을 받아 들일 수 좋아한다면 @CyrilleMODIANO을 알고 당신이 당신의 답을 정정한다면 나는 @JohnMoutafis –