Funny xmlrpc / linux problem

Brian Quinlan brian at sweetapp.com
Tue Jun 16 17:19:36 CEST 2009


Hey Hans,

Try reversing the list of numbers and see if anything changes.

Cheers,
Brian

Hans Müller wrote:
> Hello,
> 
> I found a timing problem while playing with the xmlrpx stuff.
> 
> I created a very simple server, running on a network node on windows.
> The client runs on windows or linux. It runs a very simple test function 
> on the server
> which just echos a passed string. The trip time is beeing measured.
> When I use a 1024 char test string I get a trip time in the 10-20ms 
> range on windows and linux.
> But for small arguments the trip time explodes - why on earth ?!
> 
> May be this problem is here off topic and tcp/ip stack related.
> 
> Here is the very very simply test server:
> 
> #!/usr/bin/python
> # -*- coding: cp1250 -*-
> # xmlrpc test server
> 
> import SimpleXMLRPCServer
> import xmlrpclib
> import time
> 
> # the test function - justs echos the argument
> def RunTest(buffer):
>     return buffer
> 
> 
> print "Starting RPC Server..."
> 
> # Create server
> server = SimpleXMLRPCServer.SimpleXMLRPCServer(("node01", 10000))
> server.register_function(RunTest)
> 
> # Run the server's main loop
> server.serve_forever()
> 
> 
> This is the test client:
> 
> #!/usr/bin/python
> # -*- coding: cp1250 -*-
> # Test for Roundtrip Time xmlrpc calls
> 
> import SimpleXMLRPCServer
> import xmlrpclib
> import datetime
> 
> print "started..."
> 
> 
> s = xmlrpclib.ServerProxy('http://laptvm:10000')        # place here 
> your server address
> 
> for scale in (100240, 10240, 1024, 512, 256, 128, 64, 32, 16, 10, 1):
>         print "Checking with", scale
>         buffer = "0123456789" * scale
>         now = datetime.datetime.now()
>         for i in range(10):
>                 res = s.RunTest(buffer)
>                 if buffer != res:
>                         print "data error"
>         later = datetime.datetime.now()
>         dt = later - now
> 
>         print "time for 10 loops: %f" % (dt.seconds + (0.000001 * 
> dt.microseconds))
> 
> 
> 
> Some results from my tests here:
> 
> started...
> Checking with 100240
> time for 10 loops: 3.282000
> Checking with 10240
> time for 10 loops: 0.360000
> Checking with 1024
> time for 10 loops: 0.078000
> Checking with 512
> time for 10 loops: 0.047000
> Checking with 256
> time for 10 loops: 0.046000
> Checking with 128
> time for 10 loops: 0.047000
> Checking with 64
> time for 10 loops: 1.985000    ' Whats this ?! - smaler packets, more 
> time ?!
> Checking with 32
> time for 10 loops: 2.000000
> Checking with 16
> time for 10 loops: 2.000000
> Checking with 10
> time for 10 loops: 2.000000
> Checking with 1
> time for 10 loops: 2.000000
> 
> 
> 
> Tanks a lot,
> Hans




More information about the Python-list mailing list