Встроенный Python - Блокирующиеся операции в модуле времени

Я разрабатываю свой собственный интерпретатор кода Python с помощью API Python C, как описано в документации Python. Я смотрел на исходном коде Python, и я пытался выполнить те же шаги, которые выполняются в стандартном интерпретаторе при выполнении py файла. Эти шаги (последовательность вызовов API-функции C) в основном:

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 файл со своей программой, как будто это был нормальный интерпретатор Python. Моя проблема возникает, когда код, который выполняет моя программа, использует модуль времени: все операции модуля времени заблокированы в GIL! Например, если код Python называет time.sleep (1), этот вызов заблокирован и никогда не выполняется.

Очевидно, я делаю что-то не так, что блокирует GIL (и поэтому блокирует модуль времени), но я не знаю, как исправить его. Последний оператор в моем коде, где я имею контроль, находится в PyEval_EvalFrameEx, и от той точки на, все работает "как в обычном интерпретаторе Python", я думаю.

У кого-либо была подобная проблема? Что я делаю неправильно, так, чтобы я заблокировал модуль времени? Надежда кто-то может помочь мне...

Спасибо за внимание.С уважением,

R.

7
задан starblue 8 July 2010 в 11:41
поделиться