Fixed high CPU usage when improper timezone defined (will use UTC instead). #1914

pull/2042/head
morpheus65535 2 years ago
parent 92be39beba
commit 2babae1937

@ -12,6 +12,9 @@ from apscheduler.jobstores.base import JobLookupError
from datetime import datetime, timedelta from datetime import datetime, timedelta
from calendar import day_name from calendar import day_name
from random import randrange from random import randrange
from tzlocal import get_localzone
from tzlocal.utils import ZoneInfoNotFoundError
from dateutil import tz
from sonarr.sync.series import update_series from sonarr.sync.series import update_series
from sonarr.sync.episodes import sync_episodes, update_all_episodes from sonarr.sync.episodes import sync_episodes, update_all_episodes
@ -37,7 +40,12 @@ class Scheduler:
def __init__(self): def __init__(self):
self.__running_tasks = [] self.__running_tasks = []
self.aps_scheduler = BackgroundScheduler() try:
self.timezone = get_localzone()
except ZoneInfoNotFoundError:
self.timezone = tz.gettz("UTC")
self.aps_scheduler = BackgroundScheduler({'apscheduler.timezone': self.timezone})
# task listener # task listener
def task_listener_add(event): def task_listener_add(event):
@ -255,13 +263,15 @@ class Scheduler:
def __search_wanted_subtitles_task(self): def __search_wanted_subtitles_task(self):
if settings.general.getboolean('use_sonarr'): if settings.general.getboolean('use_sonarr'):
self.aps_scheduler.add_job( self.aps_scheduler.add_job(
wanted_search_missing_subtitles_series, IntervalTrigger(hours=int(settings.general.wanted_search_frequency)), wanted_search_missing_subtitles_series,
max_instances=1, coalesce=True, misfire_grace_time=15, id='wanted_search_missing_subtitles_series', IntervalTrigger(hours=int(settings.general.wanted_search_frequency)), max_instances=1, coalesce=True,
name='Search for wanted Series Subtitles', replace_existing=True) misfire_grace_time=15, id='wanted_search_missing_subtitles_series', replace_existing=True,
name='Search for wanted Series Subtitles')
if settings.general.getboolean('use_radarr'): if settings.general.getboolean('use_radarr'):
self.aps_scheduler.add_job( self.aps_scheduler.add_job(
wanted_search_missing_subtitles_movies, IntervalTrigger(hours=int(settings.general.wanted_search_frequency_movie)), wanted_search_missing_subtitles_movies,
max_instances=1, coalesce=True, misfire_grace_time=15, id='wanted_search_missing_subtitles_movies', IntervalTrigger(hours=int(settings.general.wanted_search_frequency_movie)), max_instances=1,
coalesce=True, misfire_grace_time=15, id='wanted_search_missing_subtitles_movies',
name='Search for wanted Movies Subtitles', replace_existing=True) name='Search for wanted Movies Subtitles', replace_existing=True)
def __upgrade_subtitles_task(self): def __upgrade_subtitles_task(self):
@ -275,7 +285,11 @@ class Scheduler:
def __randomize_interval_task(self): def __randomize_interval_task(self):
for job in self.aps_scheduler.get_jobs(): for job in self.aps_scheduler.get_jobs():
if isinstance(job.trigger, IntervalTrigger): if isinstance(job.trigger, IntervalTrigger):
self.aps_scheduler.modify_job(job.id, next_run_time=datetime.now() + timedelta(seconds=randrange(job.trigger.interval.total_seconds()*0.75, job.trigger.interval.total_seconds()))) self.aps_scheduler.modify_job(job.id,
next_run_time=datetime.now(tz=self.timezone) +
timedelta(seconds=randrange(
job.trigger.interval.total_seconds() * 0.75,
job.trigger.interval.total_seconds())))
def __no_task(self): def __no_task(self):
for job in self.aps_scheduler.get_jobs(): for job in self.aps_scheduler.get_jobs():

Loading…
Cancel
Save