가상 시스템에서 일부 실험을 실행 중입니다. 일시 중지 된 경우 시스템 시간이 업데이트됩니다. 가상 컴퓨터를 일시 중단하고 타이머에 영향을주지 않는지 알고 싶습니다. 즉, Timer는 시스템 시간 또는 벽 시간을 사용합니까?어떻게 파이썬 threading.Timer 경과 시간을 결정합니까?
나는 소스 코드를 찾고 시도하고 코드가 C.
에 딥 전에 다음은 내 코드가 _thread.lock.acquire
에 도착. 나는 '계획'을 출력하는 하위 프로세스에 위임합니다. 최적의 계획이 발견되거나 최대 허용 시간이 경과 할 때까지 이러한 계획을 수집합니다. 타이머는 시간이 다되면 프로세스를 종료하는 데 사용됩니다 (예상되는 상태 임). Timer
은 실행중인 실험을 무효화하므로 업데이트되는 시스템 시간에 영향을받지 않습니다. * 유닉스 IT 시스템에 대한 파이썬 소스 코드의 검사시
p = Popen(args, stdout=PIPE, cwd=self.working_directory)
timer = Timer(float(self.planning_time), p.terminate)
timer.start()
plan = None
while True:
try:
plan = list(decode_plan_from_optic(self.decode(p.stdout),
report_incomplete_plan=True))
except IncompletePlanException:
break
timer.cancel()
나는 파이썬이 어떤 보증도 제공하지 않는다고 확신한다. 단순히 C 레벨 시스템 호출을 사용하기 때문에 문서가 어떻게 보이는지 살펴야한다. ('Timer'는 내부적으로'Lock'을 생성하고'acquire' 메소드를 호출하는'Condition' 객체를 사용하여 구현되므로 시스템 호출의 보장을 확인하여 OS에서 잠금을 획득해야합니다. – Bakuriu
@Bakuriu 감사합니다. 소스를 확인하고'thread_pthread.h '에서 대답을 발견했습니다. 그것은 파이썬 대기가 시스템 시간에 의존하는 것으로 밝혀졌습니다. – Dunes