On Wed, 12 May 2010, Ricky Zhou wrote:
On 2010-05-12 09:07:35 AM, Matt Domsch wrote:
> >From 7cd05b296ab426c386e99c3ff6f7143fbf6ed052 Mon Sep 17 00:00:00 2001
> From: Matt Domsch <Matt_Domsch(a)dell.com>
> Date: Wed, 12 May 2010 08:59:16 -0500
> Subject: [PATCH] mirrorlist_client: use select() waiting on the response from
mirrorlist_server
>
> Client was spinning waiting for read() to complete, during the time
> the server was doing its thinking. Instead, use select() to sleep
> until the server has data to return. This should reduce CPU time
> spent in the client considerably.
> ---
> mirrorlist-server/mirrorlist_client.wsgi | 15 ++++++++++-----
> 1 files changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/mirrorlist-server/mirrorlist_client.wsgi
b/mirrorlist-server/mirrorlist_client.wsgi
> index cc4416c..15b3a15 100755
> --- a/mirrorlist-server/mirrorlist_client.wsgi
> +++ b/mirrorlist-server/mirrorlist_client.wsgi
> @@ -4,7 +4,7 @@
> # by Matt Domsch <Matt_Domsch(a)dell.com>
> # Licensed under the MIT/X11 license
>
> -import socket
> +import socket, select
> import cPickle as pickle
> from string import zfill, atoi, strip, replace
> from paste.wsgiwrappers import *
> @@ -32,24 +32,29 @@ def get_mirrorlist(d):
> s.shutdown(socket.SHUT_WR)
> del p
>
> + # wait for other end to start writing
> + expiry = datetime.utcnow() + timedelta(seconds=request_timeout)
> + rlist, wlist, xlist = select.select([s],[],[],request_timeout)
> + if len(rlist) == 0:
> + s.shutdown(socket.SHUT_RD)
> + raise socket.timeout
> +
> readlen = 0
> resultsize = ''
> while readlen < 10:
> resultsize += s.recv(10 - readlen)
> readlen = len(resultsize)
> resultsize = atoi(resultsize)
> -
> - expiry = datetime.utcnow() + timedelta(seconds=request_timeout)
> +
> readlen = 0
> p = ''
> while readlen < resultsize and datetime.utcnow() < expiry:
> p += s.recv(resultsize - readlen)
> readlen = len(p)
> -
> - s.shutdown(socket.SHUT_RD)
> results = pickle.loads(p)
> del p
>
> + s.shutdown(socket.SHUT_RD)
> return results
>
> def real_client_ip(xforwardedfor):
> --
> 1.7.0.1
+1
+1
-Mike