您需要用線程填充隊列。您需要管理隊列大小。特別是如果工人們花時間處理物品。您需要標記已完成的隊列項目。如果這與你關於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