Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #73024 > unrolled thread

embedding ipython kernel in a thread

Started byGelonida N <gelonida@gmail.com>
First post2014-06-09 14:59 +0200
Last post2014-06-09 14:59 +0200
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python


Contents

  embedding ipython kernel in a thread Gelonida N <gelonida@gmail.com> - 2014-06-09 14:59 +0200

#73024 — embedding ipython kernel in a thread

FromGelonida N <gelonida@gmail.com>
Date2014-06-09 14:59 +0200
Subjectembedding ipython kernel in a thread
Message-ID<mailman.10910.1402318812.18130.python-list@python.org>
Hi,

I'd like to embed an ipython kernel in an appliction, such, that I can use

ipython console --existing kernel-<pid>.json lateron to connect to it 
and to look at some values


Due to various reason I don not want to start it in the main thread.

If you look at following example you will see, that I can start an 
ipython kernel and
connect to it as long as I start it in the main thread.

as soon as I start the kernel in another thread my ipython client prints 
  the first few lines and a welcome text, but
no prompt is shown.

Does anybody know a way o how to start IPython outside of the main thread?


Below code trying to show a working setup with ipython kernel in the 
main thread and failing if ipython kernel is started from another thread

#!/usr/bin/env python
import os, time, threading
from IPython import embed_kernel

cnt  = { 'value' : 0 }
def run_ip_kernel():
     embed_kernel(local_ns={ 'cnt': cnt})

def example_thread():
     while True:
         cnt['value'] += 1
         print(cnt['value'])
         time.sleep(5)

main_thread = run_ip_kernel
other_thread = example_thread

# if I uncomment the next two lines, then I can no more
# execute my interactive IPython shell
#main_thread = example_thread
#other_thread = run_ip_kernel

print("now you can try to connect to this shell with:")
print("ipython console --existing kernel-%d.json" % os.getpid())
threading.Thread(target=other_thread).start()
main_thread()

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web