These never quite run the same. The fluctuation seems too much to just be a result of other processes on the machine (the machine isn't really doing anything else at the moment), I think it's something to do with the multi-processing in couch itself. I've included 3 result sets here. The code behind this is at:

http://dev.jmoiron.net/code/couchtest.py

The first 4 tests and the httplib/httplib2 tests are meant as controls; they are the least amt. of code for using those 6 different libraries. 'curlcon' is an experimental reimplementation of python-couchdb's Server and Database class using pycurl & python-cjson, naively trying to use as little code as possible (not too experienced with these libraries so I'm not sure if it can go faster).

The second set of tests also features a modified version of python-couch using an HTTPConnection/HTTPResponse class based on pycurl. Profilers have shown that the CPU time for the tests that don't feature cjson & pycurl is all essentially the same; there is some extra waiting happening in python-couch and I can't find it.

The machine running this is a Linux machine, hardware is AMD X2 Dual Core Processor 4200+ w/ 2 gigs of ram running nslater's debian couch package for 0.7.2.

The disparity in the python-couch vs other tests disappears in Mac OSX as per tests run by cmlenz.

urllib2/simplejson 500 reqs:  GET 1.33s (375.98 req/s)  | VIEW 4.40s (113.61 req/s)
pycurl/simplejson 500 reqs:   GET 1.32s (378.39 req/s)  | VIEW 4.44s (112.62 req/s)
urllib2/cjson 500 reqs:       GET 1.19s (420.79 req/s)  | VIEW 3.03s (165.21 req/s)
pycurl/cjson 500 reqs:        GET 1.09s (458.98 req/s)  | VIEW 3.00s (166.49 req/s)
curlcon (py-couch) 500 reqs:  GET 1.09s (459.47 req/s)  | VIEW 3.02s (165.30 req/s)
httplib/simplejson 500 reqs:  GET 1.37s (366.10 req/s)  | VIEW 4.32s (115.78 req/s)
httplib2/simplejson 500 reqs: GET 1.37s (364.80 req/s)  | VIEW 4.35s (114.90 req/s)
python-couch 500 reqs:        GET 20.00s (25.00 req/s)  | VIEW 22.32s (22.40 req/s)

urllib2/simplejson 500 reqs:  GET 1.33s (374.66 req/s)  | VIEW 4.28s (116.74 req/s)
pycurl/simplejson 500 reqs:   GET 1.11s (452.45 req/s)  | VIEW 4.30s (116.40 req/s)
urllib2/cjson 500 reqs:       GET 1.19s (420.73 req/s)  | VIEW 3.14s (159.30 req/s)
pycurl/cjson 500 reqs:        GET 1.01s (497.46 req/s)  | VIEW 3.04s (164.47 req/s)
curlcon (py-couch) 500 reqs:  GET 1.25s (400.66 req/s)  | VIEW 2.64s (189.17 req/s)
httplib/simplejson 500 reqs:  GET 1.35s (369.88 req/s)  | VIEW 5.07s (98.69 req/s)
httplib2/simplejson 500 reqs: GET 1.36s (366.87 req/s)  | VIEW 5.08s (98.39 req/s)
python-couch 500 reqs:        GET 20.00s (25.00 req/s)  | VIEW 22.15s (22.57 req/s)

urllib2/simplejson 500 reqs:  GET 1.32s (377.94 req/s)  | VIEW 4.36s (114.71 req/s)
pycurl/simplejson 500 reqs:   GET 1.10s (455.68 req/s)  | VIEW 4.32s (115.65 req/s)
urllib2/cjson 500 reqs:       GET 1.15s (433.90 req/s)  | VIEW 2.64s (189.09 req/s)
pycurl/cjson 500 reqs:        GET 0.99s (505.37 req/s)  | VIEW 2.64s (189.06 req/s)
curlcon (py-couch) 500 reqs:  GET 0.99s (503.92 req/s)  | VIEW 2.64s (189.55 req/s)
httplib/simplejson 500 reqs:  GET 1.30s (383.60 req/s)  | VIEW 4.38s (114.12 req/s)
httplib2/simplejson 500 reqs: GET 1.34s (372.75 req/s)  | VIEW 4.46s (112.20 req/s)
python-couch 500 reqs:        GET 20.53s (24.35 req/s)  | VIEW 24.01s (20.82 req/s)