diff --git a/tests/soak/latch.py b/tests/soak/latch.py new file mode 100644 index 00000000..ce00cee0 --- /dev/null +++ b/tests/soak/latch.py @@ -0,0 +1,51 @@ +""" +Used for stressing Latch.get/put. Swap the number of producer/consumer threads +below to try both -- there are many conditions in the Latch code that require +testing of both. +""" + +import logging +import random +import threading +import time +import mitogen.core +import mitogen.utils + +mitogen.utils.log_to_file() +mitogen.core.IOLOG.setLevel(logging.DEBUG) +mitogen.core._v = True +mitogen.core._vv = True + +l = mitogen.core.Latch() +consumed = 0 +produced = 0 +crash = 0 + +def cons(): + global consumed, crash + try: + while 1: + g = l.get() + print 'got=%s consumed=%s produced=%s crash=%s' % (g, consumed, produced, crash) + consumed += 1 + time.sleep(g) + for x in xrange(int(g * 1000)): + pass + except: + crash += 1 + +def prod(): + global produced + while 1: + l.put(random.random()/10) + produced += 1 + time.sleep(random.random()/10) + +allc = [threading.Thread(target=cons) for x in range(64)] +allp = [threading.Thread(target=prod) for x in range(8)] +for th in allc+allp: + th.setDaemon(True) + th.start() + +raw_input() +exit()