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