durusmail: quixote-users: Making Quixote work in a threaded Web server.
Making Quixote work in a threaded Web server.
2002-10-04
2002-10-04
2002-10-04
2002-10-04
2002-10-06
2002-10-07
2002-10-16
2002-10-16
2002-10-16
2002-10-16
2002-10-17
2002-10-17
2002-10-17
2002-10-16
2002-10-16
Making Quixote work in a threaded Web server.
Titus Brown
2002-10-16
-> > Attached is a patch that makes three changes minimally necessary to support
-> > a model for one request/thread, multiple requests per publisher.
->
-> OK, I'm fiddling with your patch now in preparation for checking it in.
-> If you're not on the quixote-checkins list now, you might want to
-> subscribe.
->
-> First, you really *meant* to say "one request/publisher, multiple
-> simultaneous publishers" up there, right?  I sure as heck don't see
-> anything that would allow multiple requests per publisher.

Nope.  Multiple requests per publisher will now be *possible* with a subclass;
they are not currently, and (unless you want to check in the threaded
subclass code, below) would not be part of the default Quixote distribution.

As to what code I override in a subclass, imagine a subclass of Publisher,
ThreadedPublisher, with the following functions:

---
    def get_request(self, request):
        id = thread.get_ident()
        self.request_dict[id] = request

    def get_request(self):
        id = thread.get_ident()
        return self.request_dict[id]

    def clear_request(self):
        id = thread.get_ident()
        if self.request_dict.has_key(id):
            del self.request_dict[id]
--

This lets every 'quixote.get_request()' function return a thread-specific
HTTPRequest object, as opposed to the current mechanism, in which there
is a single, global _request object.

Once these functions are redefined as above, Publisher.publish is re-entrant,
and that's what's needed to make Quixote work in a threaded Web server.

I'm not sure how far to go on; should I write up something longer?

Incidentally, I'd be happy to make a (trivial!) patch to fix the mod_python
problem, but it would only benefit people who want to have multiple publishers
in one process -- not, IMO, a good idea for clarity.

cheers,
--titus

reply