From: Kevin J. R. <th...@ju...> - 2007-08-22 16:50:57
|
Hello! We're using Webware 0.9.1 and 0.9.4 in various places, so these questions apply to both versions: We're wondering 2 things: 1. Can we find the current running request for each thread, when that request started, and view the queue of requests not yet assigned to any thread? 2. Can we automatically identify a request being processed for more than a certain amount of time and terminate that request? This is a sort of a timeout setting concept. -- Kevin ___________________________________ Kevin J. Rice Senior Software Engineer, Textura LLC 51-K Sherwood Terrace, Lake Bluff IL ___________________________________ |
From: Chuck E. <chu...@gm...> - 2007-08-27 17:50:51
|
On 8/22/07, Kevin J. Rice <th...@ju...> wrote: > Hello! > > We're using Webware 0.9.1 and 0.9.4 in various places, so these questions > apply to both versions: > > We're wondering 2 things: > > 1. Can we find the current running request for each thread, when that > request started, and view the queue of requests not yet assigned to any > thread? > > 2. Can we automatically identify a request being processed for more than a > certain amount of time and terminate that request? This is a sort of a > timeout setting concept. These are interesting questions, but I haven't needed these capabilities myself so I don't know off the top of my head. Christoph might know and comment when he gets back from vacation, but otherwise I suggest digging into the code to see what you find. I suspect you could get both. -Chuck |
From: Oliver B. <ol...@g7...> - 2007-08-27 23:45:59
|
On 8/22/07, Kevin J. Rice <th...@ju...> wrote: > Hello! > > We're using Webware 0.9.1 and 0.9.4 in various places, so these questions > apply to both versions: > > We're wondering 2 things: > > 1. Can we find the current running request for each thread, when that > request started, and view the queue of requests not yet assigned to any > thread? > > 2. Can we automatically identify a request being processed for more than a > certain amount of time and terminate that request? This is a sort of a > timeout setting concept. > I asked similar questions about 12 months ago so it might be worth having a look in the mailing list archive. In the end I concluded that terminating threads requires a Python extension that I did not want the trouble of integrating (but which may be included in a future release). As regards active requests, I have implemented a system that allows me to find out what my threads are doing. It works like this: In the base class for all my servlets, I include: class MyPage(PSPPage): def awake(self, transaction): PSPPage.awake(self, transaction) thread = threading.currentThread() thread.status = dict() self.setThreadStatus('awoke', time.asctime()) def sleep(self, trans): PSPPage.sleep(self, trans) self.setThreadStatus('awoke', 'asleep') def setThreadStatus(self, name, value): threading.currentThread().status[name] = value Any servlet can use self.setThreadStatus() to record tidbits about what it is doing. Then I have a PSP servlet that displays the status for all threads: <%@page extends="WebKit.Page"%> <%@page method="writeContent"%> <%@page imports="cgi, WebKit.ThreadedAppServer, threading"%> <% server = WebKit.ThreadedAppServer.server %> Active threads according to server: <%=server.activeThreadCount()%> <% allThreads = server._threadPool notProcessing = 0 curThread = threading.currentThread() threads = filter(lambda t: t != curThread, allThreads) for thread in threads: %> <%if thread.processing:%> <% status = thread.__dict__.get('status', None) if status is None:%> <p>No status information available.</p> <%end%> <%else:%> <table> <%for key, value in status.items():%> <tr><td><%=key%></td><td><%=cgi.escape(str(value))%></td></tr> <%end%> </table> <%end%> <%end%> <%else: notProcessing = notProcessing + 1%> <%end%> <p>Not processing: <%=notProcessing%> +1 for thread servicing this request</p> |
From: Christoph Z. <ci...@on...> - 2007-08-27 21:43:19
|
Kevin J. Rice wrote: > 1. Can we find the current running request for each thread, when that > request started, and view the queue of requests not yet assigned to > any thread? The pending request are in the application._server._requestQueue. You can also find in the _processing attribute whether a thread is currently processing a request. But it seems you cannot find which request handler is currently processed by that thread. > 2. Can we automatically identify a request being processed for more > than a certain amount of time and terminate that request? This is a > sort of a timeout setting concept. If you could get the request handler associated with a thread, then you could get its starting time from its _startTime attribute and you could terminate the thread if it takes too long. But as I said I think the former is not possible. The code is in ThreadedAppServer. If you have ideas for improvement, let me know. -- Christoph |
From: Christoph Z. <ci...@on...> - 2007-08-28 07:08:52
|
Christoph Zwerschke wrote: > Kevin J. Rice wrote: >> 1. Can we find the current running request for each thread, when that >> request started, and view the queue of requests not yet assigned to >> any thread? > > The pending request are in the application._server._requestQueue. You > can also find in the _processing attribute whether a thread is currently > processing a request. But it seems you cannot find which request handler > is currently processed by that thread. We could make a simple change to ThreadedAppServer by setting the _processing attribute to the currently processed handler or None instead of True/False. Would this be helpful? -- Christoph |