R. *_* C. 7 c python api time embedded-language
我正在使用Python C API开发自己的Python代码解释器,如Python文档中所述.我已经看了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()
Run Code Online (Sandbox Code Playgroud)
我的代码的唯一区别是我手动执行AST编译,框架创建等,然后我调用PyEval_EvalFrame.
有了这个,我可以用我的程序执行一个任意的.py文件,就好像它是普通的Python解释器一样.当我的程序执行的代码使用时间模块时出现问题:所有时间模块操作都在GIL中被阻止!例如,如果Python代码调用time.sleep(1),则此调用将被阻止,永远不会被执行.
显然我做错了阻止GIL(因此阻止时间模块),但我不知道如何纠正它.我控制的代码中的最后一个语句是PyEval_EvalFrameEx,从那时起,所有内容都运行"就像常规的Python解释器一样",我想.
有人有类似的问题吗?我做错了什么,以便我阻止时间模块?希望有人可以帮助我......
谢谢你的时间.最好的祝福,
R.
您需要提供更多详细信息。