while 루프에서 24/7로 Python을 실행하게 될 것입니다. 다음은 일종의 프로그램의 예입니다.
while True:
print ("me again...")
그러나 그것을 실행하면 CPU가 100 %가됩니다! 그러나 프로그램이 장시간 동안 실행되기 때문에 CPU가 너무 뜨거워 지는 것을 원하지 않기 때문에 어쨌든 이것을 막을 수 있습니까?
while 루프에서 24/7로 Python을 실행하게 될 것입니다. 다음은 일종의 프로그램의 예입니다.
while True:
print ("me again...")
그러나 그것을 실행하면 CPU가 100 %가됩니다! 그러나 프로그램이 장시간 동안 실행되기 때문에 CPU가 너무 뜨거워 지는 것을 원하지 않기 때문에 어쨌든 이것을 막을 수 있습니까?
답변:
루프가 끝나면
time.sleep(xx)
초 또는 time.sleep(x.x)
부분 초를 나타내는
(라이브러리 시간을 다음과 같이 가져와야합니다. import time
)
프로그램에 부정적인 영향을 미치지 않으면 서 xx가 가능한 한 높아야합니다. 현재 프로그램은 Pi가 휴식을 취하거나 다른 일을 할 시간을주지 않고 항상 가능한 한 빨리 모든 일을하고 있습니다.
import time
?
작업을 반복적으로 실행해야합니다. 이것을 바쁜 대기 라고 하며 거의 항상 차선책입니다. 작업이 하위 프로세스의 출력을 확인하는 경우 subprocess.wait()
예를 들어 완료 할 수 있습니다 . 파일 시스템의 파일 또는 디렉토리가 터치 될 때까지 기다리는 작업 인 경우 pyinotify 를 사용 하여 커널이 처리하는 파일 시스템 이벤트에서 코드를 트리거 할 수 있습니다 .
CPU를 많이 소비하지 않고 바쁜 대기를 위해 무한 루프를 작성하는 방법입니다.
파이썬 2 :
from __future__ import print_function
from __future__ import division
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
파이썬 3 :
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
@gnibbler는 다른 답변에서 테스트 했으므로 제시된 코드는 최근 컴퓨터에서 1 % 이상의 CPU를 소비해서는 안됩니다. 페이로드 코드로 여전히 CPU를 너무 많이 사용하는 경우 잠자기 시간을 늘리십시오. 반면에, 페이로드 코드는 반복 실행을 위해 최적화되어야합니다. 예를 들어, 캐싱은 변경되지 않은 데이터에서 실행 속도를 높일 수 있습니다.
이 답변은 @ user2301728의 답변 을 기반으로합니다 .