tests: Import Latch soak test
parent
15194abb8c
commit
a8a31728a0
@ -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()
|
Loading…
Reference in New Issue