嵌入式Python - 在时间模块中阻止操作

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.

Pi *_*ort 1

您需要提供更多详细信息。

  • 您的口译员的行为与标准口译员有何不同?
  • 如果您只想运行任意源文件,为什么不调用更高级别的接口之一,例如PyRun_SimpleFile?您的代码是否调用了Py_Initialize