繁体   English   中英

Python C API - 停止执行(稍后继续执行)

[英]Python C API - Stopping Execution (and continuing it later)

1)我想使用Python C API中的分析函数来捕获从特定函数返回的python解释器。

2)我想暂停python解释器,将执行发送回在我的C ++程序中调用解释器的函数,最后将执行返回到python解释器,在它停止后的代码行上启动它。 我想在执行属于python的时间之间维护全局变量和本地变量。

第1部分我已经完成了。 第2部分是我的问题。 我不知道要保存什么,所以我可以返回执行,或者如果保存数据,如何返回执行。

从我可以从python API文档中获取,我将不得不保存执行帧的一些部分,但我还没有找到任何东西。 一些额外的问题...... PyFrameObject究竟包含什么? 令人惊讶的是,python API文档从未解释过。

如果我理解你的问题,你有一个调用python的C ++程序。 当python完成一个函数的执行时,你想暂停解释器并获取C ++代码所在的位置。 一段时间后,你的C ++程序需要重新调用python,让python解释器从中断处继续。

我不认为你可以用一个线程很容易地做到这一点。 在暂停解释器之前,堆栈如下所示:

[ top of stack ]
[ some interpreter frames ]
[ some c++ frames ] 

要暂停解释器,您需要保存解释器帧,然后跳回到最顶层的C ++帧。 然后要取消暂停,您需要恢复解释器帧,并将堆栈跳到您离开的位置。 跳跃是可行的(参见http://en.wikipedia.org/wiki/Setjmp.h ),但保存和恢复堆栈更难。 我不知道有这样做的API。

但是你可以用两个线程做到这一点。 在c ++程序开始时创建的线程(称为线程1)运行c ++代码,它创建线程2来运行python解释器。

最初(当运行c ++代码时),线程1正在执行,线程2被阻塞(比如在条件变量上,请参阅https://computing.llnl.gov/tutorials/pthreads/ )。 当您运行或取消暂停解释器线程1发出条件变量信号并等待它时。 这会唤醒线程2(运行解释器)并导致线程1阻塞。 当解释器需要暂停时,线程2发出条件变量的信号并等待它(因此线程2阻塞,线程1唤醒)。 你可以在线程之间来回反复到你内心的内容。 希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM