필자는 파이썬에 대한 실험을 시도하여 1 분 안에 정수에 하나를 더할 수있는 횟수를 알아 내려고했습니다. 두 컴퓨터가 CPU의 속도를 제외하고 동일하다고 가정하면, 이것은 문제의 컴퓨터에 대해 일부 CPU 작업이 얼마나 빨라질 수 있는지를 예측해야합니다.순수 파이썬에서이 루프를 빠르게 할 수 있습니까?
아래 코드는 위에 제시된 요구 사항을 충족하도록 설계된 테스트의 예입니다. 이 버전은 첫 번째 시도보다 약 20 % 빠르고 세 번째 시도보다 약 150 % 빠릅니다. 누구든지 1 분 안에 가장 많은 추가 기능을 얻는 방법에 대한 제안을 할 수 있습니까? 높은 숫자는 바람직합니다.
EDIT 1 :이 실험은 Python 3.1로 작성되었으며 네 번째 속도 향상 시도보다 15 % 빠릅니다. 대신 while 루프에서의 1
True
를 사용하는 관련된 :
def start(seconds):
import time, _thread
def stop(seconds, signal):
time.sleep(seconds)
signal.pop()
total, signal = 0, [None]
_thread.start_new_thread(stop, (seconds, signal))
while signal:
total += 1
return total
if __name__ == '__main__':
print('Testing the CPU speed ...')
print('Relative speed:', start(60))
편집이 어떤 속도 차이가 없어야한다. 다음 실험은 그것들이 동일하다는 것을 증명합니다. 먼저 main.py
이라는 파일을 만들고 다음 코드를 복사합니다.
def test1():
total = 0
while 1:
total += 1
def test2():
total = 0
while True:
total += 1
if __name__ == '__main__':
import dis, main
dis.dis(main)
생성 파이썬 가상 머신 지침이 밝혀졌다 방법 코드가 실제로 컴파일하고 보여줍니다 다음과 같은 출력을 생성한다 코드를 실행합니다.
Disassembly of test1:
2 0 LOAD_CONST 1 (0)
3 STORE_FAST 0 (total)
3 6 SETUP_LOOP 13 (to 22)
4 >> 9 LOAD_FAST 0 (total)
12 LOAD_CONST 2 (1)
15 INPLACE_ADD
16 STORE_FAST 0 (total)
19 JUMP_ABSOLUTE 9
>> 22 LOAD_CONST 0 (None)
25 RETURN_VALUE
Disassembly of test2:
7 0 LOAD_CONST 1 (0)
3 STORE_FAST 0 (total)
8 6 SETUP_LOOP 13 (to 22)
9 >> 9 LOAD_FAST 0 (total)
12 LOAD_CONST 2 (1)
15 INPLACE_ADD
16 STORE_FAST 0 (total)
19 JUMP_ABSOLUTE 9
>> 22 LOAD_CONST 0 (None)
25 RETURN_VALUE
출사 PVMIs (바이트 코드)와 완전히 동일하므로 모두 루프 속도 차이없이 실행한다.
코드가 파이썬 3임을 나타냅니다. – Day
원시 연산 속도를 사용한다면 파이썬은 당신을위한 언어가 아닙니다. –
벤치마킹 하네스가 여기에서 테스트되는 주요 것 같습니다. –