#coding: utf-8
import Queue
import threading
class MyThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.setDaemon(True)
self.queue = queue
def run(self):
while True:
try:
task = self.queue.get(timeout=2)
print 'task: %s' % task
# 这里可以处理task
except Exception, err:
break
if __name__ == '__main__':
threads = []
q = Queue.Queue()
for i in xrange(3):
thread = MyThread(q)
threads.append(thread)
for t in threads:
t.start()
for i in xrange(30):
q.put(i)
for t in threads:
t.join()
print '====== done ======'
消费者join一下试试,然后你判断一下条件,如果queue为空的时候,循环break
如果self.Queue为空的话, self.Queue.get() 会抛出 Queue.Empty 异常,这时候线程会退出,这时候都没有工作线程了。
在run()方法的while循环里面增加try...except捕获该异常试试。代码大概如下:
=======================================================================
首先:对于你说的mysql不支持多线程写入问题,我简单写了个验证程序,结论是mysql支持多线程写入的(注:实际工作中在多线程中往db中写入数据,需要加入锁机制,这里简化了),代码如下:
另外:因为不清楚你的代码的具体细节,所以不能完全定位问题,我自己写了个模拟程序,没有出现你的那种情况,希望对你有帮助,代码如下: