On Mon, Oct 12, 2015 at 6:27 PM, Marcos Dione <mdi...@grulic.org.ar> 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