Run some IPython ZMQ kernel in the background, without an interactive shell. You can connect to that kernel remotely via ZMQ.
Installation (package is on PyPI):
pip install background_zmq_ipython
Usage:
import background_zmq_ipython background_zmq_ipython.init_ipython_kernel()
The kernel will then run in the background in its own thread. The init will print some message similar to this on stdout:
To connect another client to this IPython kernel, use: jupyter console --existing kernel-1111.json
Now, after you connected, how to access globals from the main module? E.g. let's say there is a variable a
.
sys.modules["__main__"].a
should work. Via sys.modules
, you can access all the imported modules. Or just do import mod
again.
Get the stack of all/other frames via sys._current_frames()
, and there you can access the globals from other threads as well.
You can provide user_ns
to init_ipython_kernel
, e.g:
init_ipython_kernel(user_ns=globals())
or:
init_ipython_kernel(user_ns={"main_globals": globals()})
or:
init_ipython_kernel(user_ns={"a": a})
Alternatives / related links:
IPython.embed_kernel
in a background thread (example code). This has some issues (e.g. here; messing around with sys.stdout
etc).RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4