Skip to content

Commit

Permalink
Added getThreadsUsed and getMaxThreadsUsed
Browse files Browse the repository at this point in the history
  • Loading branch information
agroszer committed Sep 16, 2013
1 parent 61364d6 commit 430cade
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 1 deletion.
5 changes: 4 additions & 1 deletion CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ CHANGES
1.0.7 (unreleased)
------------------

- Nothing changed yet.
- Added
- ``getThreadsUsed``: Return the current number of working threads
- ``getMaxThreadsUsed``: Return the number MAX of working threads
since last cleared


1.0.6 (2013-08-28)
Expand Down
28 changes: 28 additions & 0 deletions src/cipher/longrequest/longrequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class RequestCheckerThread(BackgroundWorkerThread):
NOW = time.time # testing hook

maxRequestTime = 0
maxThreadsUsed = 0

def __init__(self, *args, **kw):
super(RequestCheckerThread, self).__init__(*args, **kw)
Expand Down Expand Up @@ -138,6 +139,7 @@ def doWork(self):

#allThreadIds = dict([(t.thread_id, 1) for t in THREADPOOL.workers])
workingThreadIds = dict([(k, 1) for k in THREADPOOL.worker_tracker.keys()])
self.maxThreadsUsed = max(len(workingThreadIds), self.maxThreadsUsed)

# THREADPOOL.worker_tracker has ONLY the threads which are
# doing some work!
Expand Down Expand Up @@ -247,6 +249,12 @@ def getMaxRequestTime(self, clear=False):
self.maxRequestTime = 0
return rv

def getMaxThreadsUsed(self, clear=False):
rv = self.maxThreadsUsed
if clear:
self.maxThreadsUsed = 0
return rv


def startRequestHandler(event):
try:
Expand Down Expand Up @@ -326,12 +334,32 @@ def stopThread():


def getMaxRequestTime(clear=False):
"""Return the MAX time of requests since last cleared"""
global THREAD
if THREAD is None:
raise ValueError("No thread running")
else:
return THREAD.getMaxRequestTime(clear)


def getMaxThreadsUsed(clear=False):
"""Return the number MAX of working threads since last cleared"""
global THREAD
if THREAD is None:
raise ValueError("No thread running")
else:
return THREAD.getMaxThreadsUsed(clear)


def getThreadsUsed():
"""Return the current number of working threads"""
global THREADPOOL
if THREADPOOL is None:
raise ValueError("No threadpool yet!")
else:
return len(THREADPOOL.worker_tracker.keys())


# we need to grab the request --> threadpool from somewhere
# there's no other chance than waiting for the first request
# for this we need a filter
Expand Down
73 changes: 73 additions & 0 deletions src/cipher/longrequest/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -754,6 +754,79 @@ def doctest_RequestCheckerThread_ignore_urls():
"""


def doctest_getMaxThreadsUsed_getThreadsUsed():
"""
test for getMaxThreadsUsed
>>> rct = longrequest.RequestCheckerThread(None, None, None, None)
>>> longrequest.getMaxThreadsUsed()
Traceback (most recent call last):
...
ValueError: No thread running
>>> longrequest.getThreadsUsed()
Traceback (most recent call last):
...
ValueError: No threadpool yet!
>>> longrequest.THREAD = rct
>>> longrequest.getMaxThreadsUsed()
0
>>> longrequest.THREADPOOL = DummyThreadPool()
>>> longrequest.getMaxThreadsUsed()
0
>>> longrequest.getThreadsUsed()
0
>>> now = time.time()
>>> kw = {'wsgi.url_scheme': 'https', 'PATH_INFO': '/rest/update-it',
... 'QUERY_STRING': 'bar=42', 'SERVER_PORT': '443'}
>>> req = makeRequest(kw)
>>> longrequest.THREADPOOL.worker_tracker[142] = (now - 7, req.environ)
>>> rct.doWork()
>>> longrequest.getMaxThreadsUsed()
1
>>> longrequest.getThreadsUsed()
1
>>> longrequest.THREADPOOL.worker_tracker[143] = (now - 7, req.environ)
>>> rct.doWork()
>>> longrequest.getMaxThreadsUsed()
2
>>> longrequest.getThreadsUsed()
2
>>> longrequest.THREADPOOL.worker_tracker.clear()
>>> longrequest.getThreadsUsed()
0
>>> rct.doWork()
>>> longrequest.getMaxThreadsUsed()
2
>>> longrequest.getMaxThreadsUsed(True)
2
>>> longrequest.getMaxThreadsUsed()
0
>>> longrequest.THREAD = None
>>> longrequest.THREADPOOL = None
"""


def doctest_make_filter():
"""
test for make_filter
Expand Down

0 comments on commit 430cade

Please sign in to comment.