52 lines
1.1 KiB
Python
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()
|