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


Groups > comp.lang.python > #73034

Re: embedding ipython kernel in a thread

From Gelonida N <gelonida@gmail.com>
Subject Re: embedding ipython kernel in a thread
Date 2014-06-09 16:55 +0200
References <ln4b4b$bda$1@ger.gmane.org> <5395B800.3040504@premium-sponsor.com>
Newsgroups comp.lang.python
Message-ID <mailman.10916.1402325785.18130.python-list@python.org> (permalink)

Show all headers | View raw


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.



Back to comp.lang.python | Previous | Next | Find similar | Unroll thread


Thread

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

csiph-web