您需要用线程填充队列。您需要管理队列大小。特别是如果工人们花时间处理物品。您需要标记已完成的队列项目。如果这与你关于twitter和“非常快速”输入的其他问题有关,那么就数据库插入而言,你有更多的工作要做。
对于相当复杂的话题,您的问题太模糊了。即使你想要知道这并不容易,你似乎还不够了解。我建议你对你想要做的事情有一些更具体的了解。
下面是一个填充和使用线程队列的例子。队列大小未被管理。
from threading import Thread
from Queue import Queue, Empty, Full
import itertools
from time import sleep
def do_work(q,wkr):
while True:
try:
x = q.get(block=True,timeout=10)
q.task_done()
print "Wkr %s: Consuming %s" % (wkr,x)
sleep(0.01)
except Empty:
print "Wkr %s exiting, timeout/empty" % (wkr)
break
sleep(0.01)
def fill_queue(q,limit=1000):
count = itertools.count()
while True:
n = count.next()
try:
q.put(n,block=True,timeout=10)
except Full:
print "Filler exiting, timeout/full"
break
if n >= limit:
print "Filler exiting, reached limit - %s" % limit
break
sleep(0.01)
work_queue = Queue()
threads = [Thread(target=do_work, args=(work_queue,i)) for i in range(2)]
threads.insert(0,Thread(target=fill_queue,args=(work_queue,100)))
for t in threads:
t.start()
for t in threads:
t.join()
Wkr 0: Consuming 0
Wkr 1: Consuming 1
Wkr 0: Consuming 2
Wkr 1: Consuming 3
....
Wkr 1: Consuming 99
Filler exiting, reached limit - 100
Wkr 0: Consuming 100
Wkr 1 exiting, timeout/empty
Wkr 0 exiting, timeout/empty
如何让下面的代码做*什么*? – 2010-07-10 14:42:10