On 6/9/2014 3:34 PM, Carlos Anselmo Dias wrote:

On 06/09/2014 01:59 PM, Gelonida N wrote:
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()



Whatever you're trying to do(...) ... if you look at the script I
provide you in attach and if you can think how usefull it would be to
control exponencially what you need ... that's certainly one best
approach ...

Not sure what you are trying to tell me with attached PHP code.

I hope my script is understandable to those who embedded IPython into their own python application.

Some details, that I forgot to mention:
I'm using IPython 2.0 (the API is different to the predecessor versions)
and I based my code on the examples shown on the IPython web site.

However the example code doesn't seem to work in any other thread than the main thread.

Related link:

http://ipython.org/ipython-doc/2/interactive/reference.html#embedding

thanks again for any help.
I'm rather curious to learn why the embedded kernel seems to block and top find a way to circumvent this behavoiur.




--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to