일부 멀티 스레드 CPython 코드를 프로파일 링합니다.
특정 코드 세그먼트를 실행하는 데 걸리는 시간을 측정하기 위해 GIL (Global Interpreter Lock)을 으로 설정하고 해당 세그먼트의 스레드 간을으로 바꾸고 싶습니다. 어떻게 할 수 있습니까?GIL이 스레드를 전환하지 않도록하십시오.
UPDATE :
다음 의사 코드를 가정 :
some_code_1()
make_the_interpreter_not_change_thread()
take_start_time() # time critical
code_to_profile() # time critical
take_end_time() # time critical
release_the_interpreter()
some_code_2()
내 관심사는 인터프리터가 '시간이 중요한'기간을 프로파일 링하는 동안 스레드를 전환 할 것입니다.
내 질문에 대한 업데이트보기 'make_the_interpreter_not_change_thread()'에서'sys.setcheckinterval()'을 통해 많은 수를 배치 할 수 있습니까? 인터프리터가 파이썬 가상 명령어의 현재 카운트를 변경하거나 새로운 값이'code_to_profile()'중에 유감스럽게도 발생할 수있는 인터프리터 검사의 다음 사이클에만 영향을 주겠습니까? – Jonathan
@Jonathan :이 함수는 호출 될 때 현재 카운트를 재설정합니다. 따라서 큰 값으로 호출하면 해당 바이트 코드 명령어 수만큼 스레드 전환이 수행되지 않습니다. –