DEV Community

SHRAY SALVI
SHRAY SALVI

Posted on

How to connect Ipython with own frontend?

I am a college student working on a project to create a Python playground website where users can write and run Python code. I am using the Ace code editor for the frontend, and I believe I need to use IPython in the backend to provide a Python environment for users to execute their code.

However, I am unsure about how to proceed with integrating IPython into my website. Specifically, I need guidance on how to communicate with the IPython kernel and frontend. Additionally, I would like to set up isolated environments for each user using Docker, but I'm not sure how to implement this.

Also, I think the Jupyter client can be an easy way to communicate with Kernal.

Top comments (4)

Collapse
 
airo profile image
Airo

You can leverage a running IPython kernel and connect your frontend to it

Collapse
 
shraysalvi profile image
SHRAY SALVI

I can simply run the ipython kernel with the help of ipython kernel and Now I wanted to connect to that kernel and I believe jupyter_client would be beneficial in this case but I am unable to connect to the kernel.

Collapse
 
shraysalvi profile image
SHRAY SALVI

Here is my client.py file which I am going to use to connect with a kernel

from jupyter_client import KernelManager def main(): # Create a new kernel manager  km = KernelManager(kernel_id='9912') km.start_kernel() # Create a client to interact with the kernel  kc = km.client() kc.start_channels() # Ensure the client is connected before executing code  kc.wait_for_ready() # Execute the code  code = 'print("Hello, World!")' msg_id = kc.execute(code) # Wait for the result and display it  while True: try: msg = kc.get_iopub_msg(timeout=1) print(msg) content = msg["content"] # When a message with the text stream comes and it's the result of our execution  if msg["msg_type"] == "stream" and content["name"] == "stdout": print(content["text"]) break except KeyboardInterrupt: print("Interrupted by user.") break except: # If no messages are available, we'll end up here, but we can just continue and try again.  pass # Cleanup  kc.stop_channels() km.shutdown_kernel() if __name__ == '__main__': main() 
Enter fullscreen mode Exit fullscreen mode

Now I am confused about whether KernelManager(kernel_id='9912') is connecting to my configured kernel or create one on its own.

Here is my complete process -

Step 1

Created a k_conf.json file to configure kernel

{ "shell_port": 63101, "iopub_port": 63102, "stdin_port": 63103, "control_port": 63106, "hb_port": 63105, "ip": "127.0.0.1" } 
Enter fullscreen mode Exit fullscreen mode

Then I used the command ipython kernel k_conf.json
Output:

NOTE: When using the `ipython kernel` entry point, Ctrl-C will not work. To exit, you will have to explicitly quit this process, by either sending "quit" from a client, or using Ctrl-\ in UNIX-like environments. To read more about this, see https://github.com/ipython/ipython/issues/2049 To connect another client to this kernel, use: --existing kernel-9912.json 
Enter fullscreen mode Exit fullscreen mode

TO check the output is basically generated from the kernel with k_conf.json configuration or not I need the log of created kernel.

Collapse
 
shraysalvi profile image
SHRAY SALVI

I think it is creating a new kernel, as it created a new file in my tmp/ directory, kernel-9912.json