embedding ipython kernel in a thread

Gelonida N gelonida at gmail.com
Mon Jun 9 10:55:57 EDT 2014


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.







More information about the Python-list mailing list