【问题标题】:Strange IronPython issue奇怪的 IronPython 问题
【发布时间】:2015-02-12 18:34:26
【问题描述】:

我注意到 IronPython 存在一个奇怪的问题。这是我的应用程序运行的一个非常简单的脚本:-

import globals
x = globals.x * globals.y

文件“globals.py”位于ScriptEngine的搜索路径中,只包含一系列name=value行(基本上是我们的脚本可能需要的“全局常量”),例如:-

x=5
y=10
..etc..

通常,应用程序的脚本每次运行时都能正常执行,但是如果我执行以下操作会遇到问题:-

首先,在 globals.py 中添加一个新行(例如z=15)。接下来,编辑我的应用程序脚本以使用新变量:-

import globals
x = globals.x * globals.y + globals.z

接下来执行脚本时(假设我没有关闭我的应用程序)然后我收到以下错误消息:-

'module'对象没有属性'z'

如果我重新启动我的应用程序然后执行脚本,它工作正常。我的应用程序使用单例 ScriptEngine,并且只能假设正在缓存某些东西导致这种情况(例如,旧版本的 globals.py 文件,不知何故?)。

我现在通过在每次执行脚本时创建一个新的 ScriptEngine 实例来解决此问题,但我很想知道可能导致问题的原因,以及是否有任何我可以“清除”的东西,而不必每次都实例化一个新的 ScriptEngine。

仅供参考,我的应用程序正在执行的脚本未编译。它只是使用以下方式运行:-

_engine.CreateScriptSourceFromString(
                myScript,
                SourceCodeKind.Statements);

【问题讨论】:

    标签: ironpython


    【解决方案1】:

    没关系,刚刚找到这篇文章:IronPython hosting caching imported module?

    说明 IronPython 确实缓存了导入的模块。

    【讨论】:

      【解决方案2】:

      您可以在执行后关闭引擎。

      _engine.Runtime.Shutdown();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-27
        • 2018-06-26
        • 2011-08-13
        • 2011-08-17
        • 2011-02-02
        • 2021-10-10
        • 2014-04-21
        • 2010-12-30
        相关资源
        最近更新 更多