2014-03-02 5 views
1

상태가 될 때까지 가장 효율적인 루프 :파이썬 : 나는이 작업을 수행 할 필요가 내 코드에서 지점으로 가지고

while True: 
    if first_number == second_number: 
    do_something() 
    break 

첫 번째 숫자는 내 통제 할 수없는 증가 유지하고 나는이 수를 할 때까지 기다릴 필요 계속하기 전에 두 번째 숫자의 값에 도달합니다.

리소스 (CPU)를 최대한 줄이는 가장 좋은 방법을 찾고 있습니다.

+0

루프를 건너 뛰고'first_number = second_number'를 실행 하시겠습니까? – chepner

답변

4

당신이 "통화 중 대기"라고하고있다. CPU 시간을 식사를하지 않고이 작업을 수행하기 위해, 당신은 루프의 각 반복에서 짧은 간격으로 잠을해야합니다

while True: 
    if first_number == second_number: 
    do_something() 
    break 
    time.sleep(0.1) 

는 적절한 수면 간격을 조정합니다.

하지만 원하는 것을 성취 할 수있는 더 나은 방법이있을 것입니다. first_number이 "통제 불능"이라면 어떻게 변화합니까? 프로그램에 입력이 있습니까? 소켓에서 읽는거야? 데이터에 대한 네트워크 요청을 보내시겠습니까? 이 데이터는 multiprocessing의 기능을 사용하는 프로세스간에 공유됩니까?

+0

이것은 보았지만 다른 것이 있는지보고 싶었던 해결책 중 하나입니다. –

+0

현재 해결하려고하는 실제 문제는 first_number는 노래의 현재 시간 위치이고 second_number는 노래의 총 재생 시간입니다. 노래가 끝났을 때 코드를 실행해야하지만이 기능을 처리하는 내장 함수가 작동하지 않는 것 (다른 질문)이 경우 어쨌든 궁금합니다. –

+1

유스 케이스 (일부 라이브러리 기능을 통해 별도의 스레드에서 하위 프로세스에서 재생되는 노래입니까?)에 대해 잘 모르는 대안을 추천하기가 여전히 어렵습니다. 어쨌든,이 목적을 위해'sleep'을 사용하는 것은 전적으로 표준입니다. – Alp

1

while 루프의 조건 자체에서 첫 번째 숫자가 두 번째 숫자와 같지 않은지 확인하기 만하면됩니다.

while first_number != second_number: 
+0

하지만 CPU가 100 % 실행되지 않습니까? –

+0

@A_Porcupine 100 % 의미하는 것은 무엇을하고 정확히하려는 것은 무엇입니까? – thefourtheye

+0

내 실수는 "CPU"를 놓친 것입니다. –

1

당신은 시도 할 수 있습니다 :

while first_number != second_number: 
    #Do what you want 
관련 문제