openstack 주기 적 임무 분석
본 블 로 그 는 리 트 윗 을 환영 하지만 원작 자의 정 보 를 보존 하 십시오!
블 로그 주소:http://blog.csdn.net/halcyonbaby
내용 과 본인 의 학습, 연구 와 총 결, 만약 비슷 한 점 이 있다 면 정말 영광 입 니 다!
나 는 다음 과 같은 몇 가지 측면 에서 openstack 의 주기 적 인 임무 실현 을 분석 하고 싶다.
어떻게 주기 적 인 작업 을 추가 합 니까?
모듈 의 manger. py 에 periodic 추가task 장식의 주기 적 함수.스케줄 링 주기 마다 한 번 씩 실행:
@periodic_task.periodic_task
def _instance_usage_audit(self, context):
...
지정 한 실행 간격 실행:
@periodic_task.periodic_task(
spacing=CONF.running_deleted_instance_poll_interval)
def _cleanup_running_deleted_instances(self, context):
...
주기 적 임무 원리 와 실현
decorator 에서 뭐 했 어 요?주기 적 인 작업 의 매개 변 수 를 초기 설정 합 니 다.
def periodic_task(*args, **kwargs):
def decorator(f):
# Test for old style invocation
if 'ticks_between_runs' in kwargs:
raise InvalidPeriodicTaskArg(arg='ticks_between_runs')
# Control if run at all
f._periodic_task = True
f._periodic_external_ok = kwargs.pop('external_process_ok', False)
if f._periodic_external_ok and not CONF.run_external_periodic_tasks:
f._periodic_enabled = False
else:
f._periodic_enabled = kwargs.pop('enabled', True)
# Control frequency
f._periodic_spacing = kwargs.pop('spacing', 0)
f._periodic_immediate = kwargs.pop('run_immediately', False)
if f._periodic_immediate:
f._periodic_last_run = None
else:
f._periodic_last_run = timeutils.utcnow()
return f
...
class ComputeManager(manager.Manager):
...
class Manager(base.Base, periodic_task.PeriodicTasks):
...
class PeriodicTasks(object):
...
class PeriodicTasks(object):
__metaclass__ = _PeriodicTasksMeta
def run_periodic_tasks(self, context, raise_on_error=False):
...
for task_name, task in self._periodic_tasks:
#
...
위 에서 볼 수 있 듯 이 주기 적 인 퀘 스 트 류 는 원 류 를 사용 합 니 다PeriodicTasksMeta。
원류 중에서 무엇 을 했 습 니까?
우 리 는 원류 코드 에서 모든 주기 적 인 임 무 를 로 수집 하 는 것 을 볼 수 있다.periodic_tasks 목록 에 있 습 니 다.
우 리 는 위의 주기 적 인 작업 클래스 에서 볼 수 있 고 이 목록 을 사용 하여 작업 스케줄 을 진행 했다.
#periodic_task.py _PeriodicTasksMeta
...
for value in cls.__dict__.values():
if getattr(value, '_periodic_task', False):
task = value
name = task.__name__
...
cls._periodic_tasks.append((name, task))
...
주기 적 인 임 무 는 어떻게 스케줄 링 을 촉발 합 니까?누가 run 호출 중periodic_tasks 방법?
service 는 timer 를 만 들 고 주기 적 인 작업 의 스케줄 을 정시 에 실행 합 니 다.
#nova/service.py
def start(self):
...
self.tg.add_dynamic_timer(self.periodic_tasks,
initial_delay=initial_delay,
periodic_interval_max=
self.periodic_interval_max)
...
def periodic_tasks(self, raise_on_error=False):
"""Tasks to be run at a periodic interval."""
ctxt = context.get_admin_context()
return self.manager.periodic_tasks(ctxt, raise_on_error=raise_on_error)
manager 최종 호출 주기 적 작업 클래스 중 누가 runperiodic_tasks 방법.
#nova/manager.py
def periodic_tasks(self, context, raise_on_error=False):
"""Tasks to be run at a periodic interval."""
return self.run_periodic_tasks(context, raise_on_error=raise_on_error)
예 를 들다
#nova/manager.py
@periodic_task.periodic_task
def _hello_world(self, context):
LOG.debug(_("hello period task"))
주기 적 임무 의 용도
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nginx 의 설치, 업그레이드 및 간단 한 사용Nginx 설치 – prefix = / usr / local / nginx 지정 설치 경로 – user = nginx 지정 사용자 – group = nginx 지정 기본 그룹 – with - httpssl_modul...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.