mitogen/tests/soak/latch.py

52 lines
1.1 KiB
Python

"""
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()