Message10916
> In the contructor of the PyScriptEngine a new instance of PythonInterpreter
> is created with the help of its static factory method
> threadLocalStateInterpreter(). The method passes null for the PySystemState
> to the constructor of PythonInterpreter. In the case of a null PySystemState
> the PythonInterpreter constructor instantiates the PySystemState with
> Py.getSystemState(). As I don't see any changes to the PySystemState field
> later on in the class, I'd assume that all PyScriptEngine instances share
> the same PySystemState no matter if a new ScriptContext instance is set to
> the engine or passed to the eval method or not. But I simply might miss
> something here.
I don't think you're missing anything, I think you're exactly right.
The PyScriptEngine does indeed create every PythonInterpreter with a shared PySystemState.
ScriptContext is supposed to allow you to separate the input and output of every PyScriptEngine.eval call. But the current PyScriptEngine does not implement this properly.
Instead, when you give it a ScriptContext, it takes the output handler of the ScriptContext and sets the output handler of the embedded PythonInterpreter to that handler.
The implementation of PythonInterpreter.setOut then sets the output handler of its PySystemState to that output handler.
https://hg.python.org/jython/file/tip/src/org/python/util/PythonInterpreter.java#l196
So the fact that all PythonInterpreter objects created by PyScriptEngine share the same PySystemState means that you cannot, using PyScriptEngine, separate the output in the way that you require.
I'd call that a bug in jython's JSR 223 implementation. |
|
Date |
User |
Action |
Args |
2016-08-27 13:15:28 | amak | set | messageid: <1472303728.87.0.834480531431.issue2513@psf.upfronthosting.co.za> |
2016-08-27 13:15:28 | amak | set | recipients:
+ amak, yocaba |
2016-08-27 13:15:28 | amak | link | issue2513 messages |
2016-08-27 13:15:27 | amak | create | |
|