[py-dev] Keyboard interrupt causes unclean shutdown in py.test & py.execnet

holger krekel holger at merlinux.eu
Mon Apr 27 18:32:18 CEST 2009


Hi Simon, 

On Thu, Apr 23, 2009 at 15:05 +1000, Simon wrote:
> The core problem here appears to be that when the receive thread exits  
> (because the ssh session has terminated), the main thread which is  
> running the remote_exec is effectively orphaned. If the users remote  
> exec task doesn't explicitly handle this, the main thread will stay open 
> indefinitely.
>
> The attached patch corrects this by running the receive thread as the  
> main thread and the remote_exec as a child daemon thread.

thanks for your investigations and patch!  

When I run your example script with your patch
and immediately do a "ps aux" afterwards 
i still see the subprocess but it dies 
after around 10 seconds.   Do you also see this
behaviour? 

I'd like py.execnet remain able to remotely invoke
GUI applications or other apps which need the main 
thread for their event loop.  So I am wondering if there is a
different way to achieve the same result of a clean shutdown.   

I just created a branch here:

    http://bitbucket.org/hpk42/py-shutdown/

and intend to first to write some tests.  
Please feel free to follow and contribute. 

cheers,
holger


> Simon
>
> On 21/04/2009, at 11:25 , Simon 5kycsae02-at-sneakemail.com |py-dev|  
> wrote:
>
>> This actually looks like an execnet issue, or maybe I'm not quite  
>> understanding how this should work.
>>
>> If I run the following code, I get a bunch of stuff left over. Aside  
>> from the ssh and shell instances, the main problem appears to be the  
>> python exec instance on the remote machine (in this example  
>> 'localhost'). If this process is killed, everything else seems to sort 
>> itself out.
>>
>> Calling the exit() method of the gateway doesn't seem to help. Nor  
>> does calling the close() method on the channel instance.
>>
>> =======================================
>> cmd = """
>> while True:
>> 	pass
>> """
>>
>> import py
>> g=py.execnet.SshGateway("localhost")
>> c=g.remote_exec(cmd)
>> =======================================
>>
>> Simon
>


>

> _______________________________________________
> py-dev mailing list
> py-dev at codespeak.net
> http://codespeak.net/mailman/listinfo/py-dev


-- 
Metaprogramming, Python, Testing: http://tetamap.wordpress.com
Python, PyPy, pytest contracting: http://merlinux.eu 



More information about the Pytest-dev mailing list