[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Re: how to make a SimpleXMLRPCServer abort at CTRL-C under windows

aahz

2/12/2010 5:18:00 AM

In article <mailman.2077.1265524158.28905.python-list@python.org>,
Gabriel Genellina <gagsl-py2@yahoo.com.ar> wrote:
>
>Strange. With Python 2.6.4 I don't need to do that; I'd say the difference
>is in the OS or antivirus (some AV are known to break the TCP stack).

Perhaps, but I've also found that ctrl-C doesn't work on Windows.
--
Aahz (aahz@pythoncraft.com) <*> http://www.python...

"At Resolver we've found it useful to short-circuit any doubt and just
refer to comments in code as 'lies'. :-)"
5 Answers

Frank Millman

2/12/2010 7:00:00 AM

0


"Aahz" <aahz@pythoncraft.com> wrote in message
news:hl2ob2$3ib$1@panix5.panix.com...
> In article <mailman.2077.1265524158.28905.python-list@python.org>,
> Gabriel Genellina <gagsl-py2@yahoo.com.ar> wrote:
>>
>>Strange. With Python 2.6.4 I don't need to do that; I'd say the difference
>>is in the OS or antivirus (some AV are known to break the TCP stack).
>
> Perhaps, but I've also found that ctrl-C doesn't work on Windows.

I don't know if this is exactly the same, but FWIW ...

I had the following, in a test program -

from wsgiref.simple_server import make_server

myserver = MyServer()
httpd = make_server('', 7789, myserver)
httpd.serve_forever()

try:
while True:
sleep(1)
except KeyboardInterrupt:
httpd.shutdown()

I could not get it to respond to Ctrl-C.

Then I read somewhere that it must run in a separate thread, so I changed it
like this -

- httpd.serve_forever()
+ threading.Thread(target=httpd.serve_forever).start()

Now it does respond to Ctrl-C.

HTH

Frank Millman


Dennis Lee Bieber

2/12/2010 7:58:00 AM

0

On 11 Feb 2010 21:18:26 -0800, aahz@pythoncraft.com (Aahz) declaimed the
following in gmane.comp.python.general:

> In article <mailman.2077.1265524158.28905.python-list@python.org>,
> Gabriel Genellina <gagsl-py2@yahoo.com.ar> wrote:
> >
> >Strange. With Python 2.6.4 I don't need to do that; I'd say the difference
> >is in the OS or antivirus (some AV are known to break the TCP stack).
>
> Perhaps, but I've also found that ctrl-C doesn't work on Windows.

Unless the running program makes an I/O call to the console, I don't
think <ctrl-c> gets past the device driver... <G>
--
Wulfraed Dennis Lee Bieber KD6MOG
wlfraed@ix.netcom.com HTTP://wlfraed.home.netcom.com/

aahz

2/12/2010 2:23:00 PM

0

In article <mailman.2422.1265961504.28905.python-list@python.org>,
Dennis Lee Bieber <wlfraed@ix.netcom.com> wrote:
>On 11 Feb 2010 21:18:26 -0800, aahz@pythoncraft.com (Aahz) declaimed the
>following in gmane.comp.python.general:
>> In article <mailman.2077.1265524158.28905.python-list@python.org>,
>> Gabriel Genellina <gagsl-py2@yahoo.com.ar> wrote:
>>>
>>>Strange. With Python 2.6.4 I don't need to do that; I'd say the difference
>>>is in the OS or antivirus (some AV are known to break the TCP stack).
>>
>> Perhaps, but I've also found that ctrl-C doesn't work on Windows.
>
> Unless the running program makes an I/O call to the console, I don't
>think <ctrl-c> gets past the device driver... <G>

That's probably it. It's more annoying for me because I run Windows with
a VM on a Mac, which doesn't have ctrl-break.
--
Aahz (aahz@pythoncraft.com) <*> http://www.python...

"At Resolver we've found it useful to short-circuit any doubt and just
refer to comments in code as 'lies'. :-)"

Gabriel Genellina

2/13/2010 1:37:00 AM

0

En Fri, 12 Feb 2010 11:22:40 -0300, Aahz <aahz@pythoncraft.com> escribió:

> In article <mailman.2422.1265961504.28905.python-list@python.org>,
> Dennis Lee Bieber <wlfraed@ix.netcom.com> wrote:
>> On 11 Feb 2010 21:18:26 -0800, aahz@pythoncraft.com (Aahz) declaimed the
>> following in gmane.comp.python.general:
>>> In article <mailman.2077.1265524158.28905.python-list@python.org>,
>>> Gabriel Genellina <gagsl-py2@yahoo.com.ar> wrote:
>>>>
>>>> Strange. With Python 2.6.4 I don't need to do that; I'd say the
>>>> difference
>>>> is in the OS or antivirus (some AV are known to break the TCP stack).
>>>
>>> Perhaps, but I've also found that ctrl-C doesn't work on Windows.
>>
>> Unless the running program makes an I/O call to the console, I don't
>> think <ctrl-c> gets past the device driver... <G>
>
> That's probably it. It's more annoying for me because I run Windows with
> a VM on a Mac, which doesn't have ctrl-break.

On a "real" PC with Windows XP SP3 and Python 2.6.4, with an idle server,
just hitting Ctrl-C was enough:

D:\temp>python -m SimpleXMLRPCServer
Running XML-RPC server on port 8000
Traceback (most recent call last):
File "d:\apps\python26\lib\runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "d:\apps\python26\lib\runpy.py", line 34, in _run_code
exec code in run_globals
File "d:\apps\python26\lib\SimpleXMLRPCServer.py", line 615, in <module>
server.serve_forever()
File "d:\apps\python26\lib\SocketServer.py", line 224, in serve_forever
r, w, e = select.select([self], [], [], poll_interval)
KeyboardInterrupt

A slightly more realistic example: a busy, single threaded server. I had
to hit Ctrl-C twice: the first time, KeyboardInterrupt was sent as a Fault
response to the client.


import sys

def busy():
x = 50000
y = x**x
return "Ok"

if sys.argv[1]=='server':
import SimpleXMLRPCServer
server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost",
8000),logRequests=False)
server.register_function(busy)
server.serve_forever()
else:
import xmlrpclib
proxy = xmlrpclib.ServerProxy("http://localhost:8000/")
while True:
print "client", proxy.busy()


Maybe the OP's code containes a bare 'except:' clause that swallows
KeyboardInterrupt, or the server is so busy that is always executing a
function handler (and all KeyboardInterrupt become Fault and are sent as a
function response).

Mmm, perhaps that's a bug, a KeyboardInterrupt should bubble up to the
server code, not being treated as an error in computing the function
result.

--
Gabriel Genellina

Dennis Lee Bieber

2/13/2010 9:26:00 AM

0

On Fri, 12 Feb 2010 22:36:42 -0300, "Gabriel Genellina"
<gagsl-py2@yahoo.com.ar> declaimed the following in
gmane.comp.python.general:

>
> On a "real" PC with Windows XP SP3 and Python 2.6.4, with an idle server,
> just hitting Ctrl-C was enough:
>
> D:\temp>python -m SimpleXMLRPCServer
> Running XML-RPC server on port 8000
> Traceback (most recent call last):
> File "d:\apps\python26\lib\runpy.py", line 122, in _run_module_as_main
> "__main__", fname, loader, pkg_name)
> File "d:\apps\python26\lib\runpy.py", line 34, in _run_code
> exec code in run_globals
> File "d:\apps\python26\lib\SimpleXMLRPCServer.py", line 615, in <module>
> server.serve_forever()
> File "d:\apps\python26\lib\SocketServer.py", line 224, in serve_forever
> r, w, e = select.select([self], [], [], poll_interval)
> KeyboardInterrupt
>
Well... Okay, maybe not a full console I/O request but I suspect
code that didn't use select() might also be non-responsive -- while
select() only works with sockets on Windows, it may include a check for
<ctrl-c>... code that doesn't invoke such an event-based wait, though?
--
Wulfraed Dennis Lee Bieber KD6MOG
wlfraed@ix.netcom.com HTTP://wlfraed.home.netcom.com/