我有一个嵌入Python解释器的C++应用程序。代码中有些地方可能会解释器中断,我需要确保解释器处于“安全”状态才能执行新代码。我只是调用Py_Finalize并重新初始化所有东西,除了我有一堆PyObject *引用,我需要保持有效。有没有这样做的功能,还是甚至有必要?当我提到口译员正在被打断时,我的意思是一个seg。我的应用尝试从中恢复的故障或访问冲突。如何将Python解释器重置为“安全”状态?
回答
呃,试图从段错误或访问冲突“恢复”是相当危险的。你首先得到这些信息的原因是,你的程序试图做一些它本不应该做的事情;因此它遇到了错误或无法预料的情况。
在这种情况下,Python解释器没有规定回滚到“安全点”。即使最终确定并重新初始化解释器,也可能会使一些静态数据处于不一致的状态。
如果您告诉我们您为什么试图这样做,我们可能会提出一个替代方案。
我的应用程序嵌入了Python解释器,允许第三方扩展它。我自己的一些脚本(特别是tkinter脚本)由于某种原因崩溃并进行调试告诉我有问题的代码位于python31.dll – 2010-01-03 20:25:38
然后唯一理智的答案是尝试找出究竟是什么崩溃,并修复它和/或绕过它和/或向http://bugs.python.org报告错误:-) – 2010-01-03 22:49:20
嗯,我试了一下,它的工作原理!我首先调用SetUnhandledExceptionFilter,然后当发生访问冲突时,我的函数被调用。然后,我简单地增加注册EIP,直到麻烦的代码过去,然后恢复。当然,用户被告知他应该保存他的工作并重新启动,但它确实有效。 – 2010-01-04 02:09:51
- 1. 如何安全地将Hangfire重置为干净状态?
- 2. 如何在离线状态下安装SL4A的解释器
- 3. 如何将状态重置为初始状态?
- 4. 重置Python日志解释器
- 5. iOS - 如何重置为新状态
- 6. 设置Python解释器
- 7. 在线c#解释器安全问题
- 8. 将jython解释器设置为PyDev
- 9. 如何在Zeppelin中更改Python解释器的python安装位置?
- 10. Python解释器行为?
- 11. Python网页前端,保留解释器状态
- 12. 替换MacOS X默认Python解释器安全吗?
- 13. 无法解释为什么std :: istream_iterator将std :: ios_base设置为错误状态
- 14. 从python获取全局解释器锁
- 15. 在准备状态时可以安全地重置MediaPlayer?
- 16. 如何将画布按钮状态设置为正常(Python 3)
- 17. 如何将xmpp状态设置为脱机状态?
- 18. 如何将onyx.Picker重置为预选状态
- 19. 如何将Angular4的FormGroup重置为原始状态?
- 20. 如何将Siri授权状态重置为未确定?
- 21. 如何告诉python不要将hash符号解释为注释?
- 22. 如何将virtualenv设置为PyDev解释器?
- 23. 你如何找出python解释器在python中的位置?
- 24. 如何使用SSH将VPS服务器重置为原始状态
- 25. python如何克服全局解释器锁
- 26. JSONP安全性的状态
- 27. Python解析输入作为解释器
- 28. java不安全,如何将内存解释为其他类型的对象?
- 29. 重定向Python解释器的IO
- 30. 有没有办法在python doctest中重新启动或重置python解释器?
什么是安全状态?处于不安全状态的后果是什么?是什么让你觉得它可能处于不安全的状态?您是否编写了一些嵌入在以不安全状态结束的应用中的其他语言?结果是什么?您可能想详细说明其中的一个或所有问题。这很有说服力,三个小时后,没有人发布回复。 – hughdbrown 2010-01-03 02:57:13
好的。一个安全的状态将是我可以在脚本中调用函数的一个点。如果函数被调用,那么不安全的状态将会发生致命错误。我从来没有嵌入解释器,我很少编写异常处理代码。希望有所帮助。 – 2010-01-03 05:36:19