파이썬 파이썬 내부 내부 실행 프로세스 실행

 

파이썬 내부 실행 과정

첫째, 컴파일 과정의 개요

  우리는 우리의 코드를 "해체"네 개의 프로세스를 사용하여 인터프리터 파이썬에서 파이썬 코드를 실행하면 CPU가 실행은 결국 사용자에게 반환.

  첫째, 사용자 유형 사용자 유형의 키워드 또는 키워드가 잘못 입력하는 경우, 예를 들어, 어휘 분석을 수행 할 때 파이썬을 처리하는 코드가, 어휘 분석이 트리거 될 때, 잘못된 코드가 실행되지 않습니다.

  에서, 콜론 뒤 시험은 다른 기호처럼 기록, 그래도 코드가 실행되지 않습니다 : 다음 단계는 "내가 시험에 대한"로 파이썬을, 구문 분석됩니다.

  여기 파이썬, 파이썬 바이트 코드 된 .pyc 파일을 생성합니다 실행하기 전에, 가장 중요한 공정을 입력하고 우리가 조심하지 파이썬은 다음 프로그램을 다시 컴파일, 바이트 코드를 수정하면 그것은 마지막 세대가 될 것입니다 바이트 코드 파일은 일치하지 않는 경우, 비교 컴파일 된 바이트 코드의 정확성마다 보장하기 위해 바이트 코드 파일 커버를 수정됩니다.

  그래서 바이트 코드는 무엇인가? 파이썬에서 가상 머신 프로그램에 해당하는 바이트 코드는 PyCodeObject 개체입니다. .pyc 파일 바이트 코드 파일은 디스크의 형태이다. 단순히 컴파일 된 코드의 프로세스이고, 첫 번째 코드 등 객체 분류 프로세스, 기능, 그리고 바이트 코드 파일을 생성한다. 바이트 코드 파일로, CPU가 직접 실행할 수 파이썬 다음 파일이 처리 된 바이트 코드를 식별하고있다.

둘째로, 처리는 도시

셋째, 컴파일 된 바이트 코드

  파이썬이 내장 된 기능 컴파일 (), 소스 파일이 codeobject로 컴파일 할 수있다, 함수의 설명에서 첫번째보기 :

  (...) 컴파일 (소스 파일명 모드 [플래그 [dont_inherit])를 컴파일 -> 코드 개체

  매개 변수 1 : 소스 파일 문자열의 내용

  매개 변수 2 : 소스 파일 이름

  3 매개 변수 : exec- 컴파일 된 모듈, 단일 컴파일 성명, 일반적으로 처음 세 개의 매개 변수를 컴파일하는 데 사용하는 표현식을 충분히있다 악구

  사용 예 :

# src_file.py

# 일부 기능

DEF F (d = 0) :

    C = 1

    인쇄  " 안녕하세요 "
= 9

B = 8

에프()

 

A = 오픈 >>> ( ' src_file.py ' , ' R & LT ' ) .read ()     # 컴파일 모드 명령은 소스 파일을 열고

>>> 컴파일 CO = (a, ' src_file ' , ' 간부 ' )

>>> 타입 (공)

<유형은 ' 코드 ' >     #은 대상 codeobject 컴파일

 

넷째, 객체 속성 codeobject

  codeobject 어떤 변수, 연결 부분의 내용을 분석 :

>>> 인쇄 co.co_names     # 모든 기호 이름 

( ' F ' , ' ' , ' B ' )

 

>>> 인쇄 co.co_name     #의 모듈 이름, 함수 이름, 클래스 이름

<모듈>

 

>>> 인쇄 co.co_consts의     #의 상수 세트 및 INT F 함수 두 상수 A, B, D 

(0 <0xb7273b18 F 파일 AT 목적 코드 " 의 SRC_FILE에서 " , 라인 2> ,. 9 ,. 8 , 없음)

 

>>> 인쇄 co.co_consts는 [. 1] .co_varnames     # 1 함수 f는 codeobject 로컬 변수 프린트 F 것을 알 수있다 

( ' C ' )

 

>>> 인쇄 co.co_code     #의 바이트 코드 명령

dZdZdZedS

 

>>> 인쇄 co.co_consts [. 1] .co_firstlineno     #의 파일의 코드 블록 행 번호를 시작


 

>>> 인쇄 co.co_stacksize     #의 코드 스택 크기


 

>>> 인쇄 co.co_filename의     #의 파일 이름 

의 SRC_FILE에서     #의 모듈 이름, 함수 이름, 클래스 이름

 

  co_code의 codeobject는 바이트 코드의 의미는 무엇 바이트 코드를 나타냅니다? 우리의 창피 모듈 컴파일 파이썬을 사용할 수 있습니다 :

수입 DIS

dis.dis (공)

>>> 출력

 2         0 0 LOAD_CONST (0)

          3 LOAD_CONST 1 (<0xb7273b18에서 부호 F 오브젝트 파일 " src_file " , 라인 2> )

          6 MAKE_FUNCTION 1

          9 STORE_NAME 0 (F)

 5~12 LOAD_CONST 2 (9 )

          15 STORE_NAME 1 (a)

 
 6 내지 18 LOAD_CONST 3 (8 )

          21 STORE_NAME 2 (b)

 
 7 24 LOAD_NAME 0 (F)

          27 CALL_FUNCTION 0

          30 POP_TOP            

          31 LOAD_CONST 4 (없음)

          34 RETURN_VALUE

 

  디 컴파일의 결과의 관점에서, 파이썬 바이트 코드는 실제로 86의 편집을 모방, 코드는 그것을 할 수있는 가상 CPU에 하나 개의 명령어로 컴파일됩니다.

  • 첫번째 컬럼 : 행 번호
  • 두번째 컬럼 : 코드 블록의 오프셋 지시
  • 세번째 컬럼 : 조작법
  • 네번째 컬럼 : 피연산자
  • 다섯 번째 칼럼 : 피연산자 지침

 

 

https://blog.csdn.net/helloxiaozhe/article/details/78104975

 

추천

출처www.cnblogs.com/rgxx/p/12029124.html