From 7cd05b296ab426c386e99c3ff6f7143fbf6ed052 Mon Sep 17 00:00:00 2001
From: Matt Domsch Matt_Domsch@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@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):
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@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@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
Thanks, Ricky
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@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@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
infrastructure@lists.fedoraproject.org