On Mon, Oct 12, 2015 at 6:27 PM, Marcos Dione <[email protected]> wrote:
> So far I managed to do the first part, but not the second. I managed
> to transfer the locals back from the remote. My problem is modifying the
> locals in remote()'s __exit__() method. As I'm running the code using
> exec(), it's not just a matter of modifying locals()[2].
Short answer: You can't.
Modifying locals is not something that's ever supported (except in the
trivial case where locals() is globals(), as mutating globals() *is*
supported). Personally, I'd be inclined to switch from a 'with' block
to a function with a decorator - something like this:
[local code 1]
@remote(...)
def operationname():
[remote code]
[local code 2]
The decorator could then do the actual remote call. I'm assuming here
that it's a synchronous call, and that [local code 2] doesn't begin
until [remote code] has finished. Then you simply use nonlocal and/or
global to mark which names need to get rebound after the call. This
might even be possible with existing CPython - I'm not sure.
ChrisA
--
https://mail.python.org/mailman/listinfo/python-list