# -*- coding: UTF-8 -*-
import threading
import time
from random import randint
from Queue import Queue
class MyThread(threading.Thread):
def __init__(self, func, args, name =""):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
def run(self):
apply(self.func, self.args)
def writeQ(queue):
print "producing object for Q..."
queue.put("XXX", 1)
print "size now", queue.qsize()
def readQ(queue):
val = queue.get(1)
print "consumed object from Q ...size now", queue.qsize()
def writer(queue, loops):
for i in range(loops):
writeQ(queue)
time.sleep(randint(1, 3))
def reader(queue, loops):
for i in range(loops):
readQ(queue)
time.sleep(randint(2, 5))
funcs = [writer, reader]
nfuncs = range(len(funcs))
def main():
nloops = randint(2, 5)
q = Queue(32)
threads = []
for i in nfuncs:
t = MyThread(funcs[i], (q, nloops), funcs[i].__name__)
threads.append(t)
for i in nfuncs:
threads[i].start()
for i in nfuncs:
threads[i].join()
print "all done"
if __name__ == "__main__":
main()