나는 다음과 같은 파이썬 코드가 : 나는 그것을 실행하면주 스레드가 무한 루프를 실행 중일 때 다른 스레드에서 모듈을 가져 오는 데 시간이 오래 걸리는 이유는 무엇입니까?
import threading
from datetime import datetime
import time
def f():
print('---- {:%H:%M:%S}'.format(datetime.now()))
import http.server
print('---- {:%H:%M:%S}'.format(datetime.now()))
threading.Thread(target=f).start()
while True:
pass
, 나는 많은 시간이 import http.server
에 소비되는 참조하십시오. 다음 출력에서 볼 수 있듯이 가져 오기를 수행하는 데 23 초가 걸렸습니다. 나는 무한 while
루프에서 약간의 잠을 넣으면
C:\>python foo.py
---- 10:12:03
---- 10:12:26
그러나, 수입은 빠르게 발생합니다.
import threading
from datetime import datetime
import time
def f():
print('---- {:%H:%M:%S}'.format(datetime.now()))
import http.server
print('---- {:%H:%M:%S}'.format(datetime.now()))
threading.Thread(target=f).start()
while True:
time.sleep(1)
출력 :
C:\>python foo.py
---- 10:15:58
---- 10:15:58
내가 join()
방법의 사용은 알고 있지만 무한 while
루프가 수면 문이없는 때 정확하게 알고 왜 import http.server
에 너무 오래 걸립니까 싶어 그것.
달리기를 거의하지 않는다고 가정하면, while while 루프는 너무 자주 그리고 자주 발생하므로이 방법으로 보면 각 스레드의 각 호출에 "지퍼 원칙적으로 모든 스레드는 다음 스레드가 자신의 스레드가되기 전에 하나의 CPU주기를 갖습니다. 따라서 코드가 많은 "큰"모듈을 가져 오려면 각 라인 사이에 하나의'while True'가 반복되어 프로세서에서 한 사이클을 소비하기 때문에 시간이 걸릴 것입니다. – Torxed
@Torxed는 CPython 인터프리터가 실행중인 프로세서의 코어에서만 99,9 %의 CPU 사이클을 소모 할 것입니다. 다른 코어는 영향을받지 않습니다. – ElmoVanKielmo
Python이 여러 개의 코어에서 실행되도록 개발되지 않았기 때문에 분명히 예. 이것은 내가 설명 할 필요가 없어야한다고 생각한 것입니다. 그래서 오래 전 제 설명의 해당 부분을 제거했습니다 :) – Torxed