파이썬 문서에서 설명한대로 파이썬 C API를 사용하여 자신의 파이썬 코드 인터프리터를 개발하고 있습니다. Python 소스 코드를 살펴 보았고 py 파일을 실행할 때 표준 인터프리터에서 수행되는 것과 동일한 단계를 수행하려고했습니다. 이 단계 (C API 함수 호출의 순서는) 기본적으로 다음과 같습니다임베디드 파이썬 - 시간 모듈에서의 조작 차단
PyRun_AnyFileExFlags()
PyRun_SimpleFileExFlags()
PyRun_FileExFlags()
PyArena_New()
PyParser_ASTFromFile()
run_mod()
PyAST_Compile()
PyEval_EvalCode()
PyEval_EvalCodeEx()
PyThreadState_GET()
PyFrame_New()
PyEval_EvalFrameEx()
내 코드의 유일한 차이가 나는 등, 수동 AST 편집, 프레임 생성 할 다음 내가 PyEval_EvalFrame를 호출 할 것입니다.
이걸로 내 프로그램으로 보통의 파이썬 인터프리터처럼 임의의 .py 파일을 실행할 수 있습니다. 내 문제는 내 프로그램에서 실행중인 코드가 시간 모듈을 사용하게되면서 발생합니다. 모든 시간에 모듈 작업이 GIL에서 차단됩니다! 예를 들어, 파이썬 코드가 time.sleep (1)을 호출하면이 호출은 차단되고 절대로 실행되지 않습니다.
분명히 나는 GIL을 차단하는 (그리고 따라서 시간 모듈을 차단하는) 잘못된 것을하고있다. 그러나 그것을 교정하는 방법을 모른다. 필자가 코드를 제어 할 수있는 마지막 문장은 PyEval_EvalFrameEx에 있으며 그 시점부터 모든 것이 "일반 파이썬 인터프리터처럼"실행됩니다.
아무도 비슷한 문제가 있습니까? 시간 모듈을 차단하기 위해 내가 뭘 잘못하고 있니? 누군가가 나를 도울 수 있기를 바랍니다 ...
시간 내 주셔서 감사합니다. 안부 인사,
R.
나는 당신의 수면이 GIL을 차단하는 것이라고 상상합니다. 자작농 통역사를 운영해야하는 이유는 무엇입니까? – synthesizerpatel