On 03 October 2002, Titus Brown said: > I've made Quixote run in a multi-threaded environment, and this work has > suggested a few changes that I'd like to make in the distribution. I don't > think any of them are particularly unreasonable ;). Excellent! I'm all ears. I'd like to wring a "multi-threaded Quixote" document out of you if possible. > It seems like some reorganization along these lines has already been done > in 0.5.1, but I haven't seen the code yet; these suggestions are all made > against the 0.5 codebase. You should defintely get the 0.5.1 code out of CVS, then. Andrew rearranged responsibilities between publish(), try_publish(), and parse_request(), and added a process_request() method -- all of these changes directly affect what you're trying to do. > * Can Publisher.start_time be moved to HTTPRequest? Hmmm, that sounds sensible to me. > * At the end of 'try_publish', can the _request object be invalidated in > some manner? (Preferably in a function that I can override in a > subclass of Publisher, like parse_request() but for deleting the > request.) The distinction between this and the finish_*_request > functions is that this function should ALWAYS be called independently > of the session manager etc. stuff. Look at process_request() in the current CVS code. I think the thing to do is put a try/finally clause in there, and clear _request in the "finally". That's not subclass-friendly, but it puts responsibility for maintaining the global in one place. > * Can get_request call a function on _publisher, i.e. make _request be a > member of Publisher grabbed through an accessor fn? I can't > override the functionality of get_request, as-is, because it is > a module function. As long as there's one global _publisher, there might as well be one global _request. I don't think you can change this by subclassing -- you'll have to give us a patch to transform those globals into dicts. (There would always be at most one Publisher per thread, so just map thread ID to Publisher object. Ditto for _request.) > It would also be nice to have parse_request() set _request through > an accessor function, for the same reason. This could be in > either start_request() or parse_request(). That's all different in the current code -- again, see process_request(). Greg -- Greg Ward - software developer gward@mems-exchange.org MEMS Exchange http://www.mems-exchange.org