[Zope] threading in zope
Daniel Mahler
mahler@cyc.com
Mon, 8 Jul 2002 02:46:31 -0500
I am trying to figure out how Zope processes concurrent requests.
I am running Zope using ZServer
(without a webserver in front)
My initial investigations suggest contradictory answers:
* ZServer uses medusa,
which uses asyncore which works by single threaded select multiplexing
* z2.py has::
# The size of the thread pool, if ZODB3 is used.
NUMBER_OF_THREADS=4
sugesting we are running multi threaded.
* the following modification of the Minimal Product How-To,
suggests that requests are being processed single threaded::
from time import sleep, clock, time
from OFS import SimpleItem
class minimal(SimpleItem.SimpleItem, Thread):
"minimal object"
meta_type = 'minimal'
manage_options = (
{'label': 'View', 'action': 'index_html'},
)
def __init__(self, id):
"initialise a new instance of Minimal"
self.id = id
def index_html(self):
"used to view content of the object"
time1 = time()
sleep(10)
time2 = time()
return '<html><body>Hello World<br>%s<br>%s<br></body></html>'%(time1,time2)
def manage_addMinimal(self, id, RESPONSE=None):
"Add a Minimal to a folder."
self._setObject(id, minimal(id))
RESPONSE.redirect('index_html')
def manage_addMinimalForm(self):
"The form used to get the instance' id from the user."
return """<html>
<body>
Please type the id of the minimal instance:<br>
<form name="form" action="manage_addMinimal"><br>
<input type="text" name="id"><br>
<input type="submit" value="add">
</form>
</body>
</html>"""
If I fire several requests to an instance of this class in rapid
succession, Zope serializes them time1 of the second is after time2
of the first, time1 of the third is after time2 of the second and
so on, suggesting that Zope is processing the requests purely
sequentially.
thanks
Daniel