이 Python 프로그램의 CPU 사용량을 어떻게 줄일 수 있습니까?


15

while 루프에서 24/7로 Python을 실행하게 될 것입니다. 다음은 일종의 프로그램의 예입니다.

while True:

    print ("me again...")

그러나 그것을 실행하면 CPU가 100 %가됩니다! 그러나 프로그램이 장시간 동안 실행되기 때문에 CPU가 너무 뜨거워 지는 것을 원하지 않기 때문에 어쨌든 이것을 막을 수 있습니까?


3
기다리지 않고 CPU는 100 %가됩니다. 가능한 한 빨리 인쇄하십시오. 기다림은 그 부담을 덜어 줄 것입니다. 인쇄는 일반적으로 매우 비싼 작업입니다. 파일에 쓰는 것이 훨씬 저렴합니다.
Piotr Kula 2016 년

주어진 시간 동안 CPU 사이클을 원하지 않는다고 운영 체제에 알려야합니다. 그렇지 않으면, 보이는 것을 피하기 위해 아무것도 할 수 없습니다.
Thorbjørn Ravn Andersen

답변:


16

루프가 끝나면

time.sleep(xx)초 또는 time.sleep(x.x)부분 초를 나타내는

(라이브러리 시간을 다음과 같이 가져와야합니다. import time)

프로그램에 부정적인 영향을 미치지 않으면 서 xx가 가능한 한 높아야합니다. 현재 프로그램은 Pi가 휴식을 취하거나 다른 일을 할 시간을주지 않고 항상 가능한 한 빨리 모든 일을하고 있습니다.


흠 ... 매우 흥미로운 ... 시도해 볼게요. 감사! 나는 그것을 생각하지 못했다는 것을 믿을 수 없다!
user151324

가져와야하는 라이브러리가 있습니까? 시간이 정의되지 않았다는 오류 메시지가
표시됨

@coding_corgi 예, 시간 라이브러리가 필요합니다.
버터

2
그래서 import time?
user151324

@coding_corgi. 네 맞습니다.
버터

14

머리말

작업을 반복적으로 실행해야합니다. 이것을 바쁜 대기 라고 하며 거의 항상 차선책입니다. 작업이 하위 프로세스의 출력을 확인하는 경우 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의 답변 을 기반으로합니다 .


3

같은 문제가 발생했습니다 . 스택 교환에 대한 내 질문을 참조하십시오 . 용액의 조합이었다 time.sleep(0.01)하고 nice. nice응용 프로그램에서 사용 가능한 CPU를 줄입니다. 이것이 내가 앱을 시작하는 방법 nice -n 19입니다.


1

시도해 볼 수도 있습니다 nice -n 19 python myscript.py.

nice 는 작업의 CPU 우선 순위를 설정하는 * nix 유틸리티입니다. 19는 가장 큰 무게이며 결과적으로 가장 느린 설정입니다.


2
아닙니다. 프로세스의 유용성을 높이는 것은 다른 프로세스가 CPU를 더 자주 사용할 수있게하는 것만으로 도움이됩니다. 다른 프로세스가없는 순간에도 OP의 코드는 여전히 100 % CPU를 사용하며, 존재하는 경우 CPU를 사용하여 총 100 %로 다시 계산합니다.
Bengt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.