from threading import Thread
import time
print 'start of script'
class MyThread(Thread):
def __init__(self, start, end):
self.start = start
self.end = end
def run(self):
for i in xrange(self.start,self.end):
yield i
my_threads = []
my_thread = MyThread(1,6)
my_thread.start()
my_threads.append(my_thread)
my_thread = MyThread(6,11)
my_thread.start()
my_threads.append(my_thread)
my_thread = MyThread(11,16)
my_thread.start()
my_threads.append(my_thread)
for t in my_threads:
print t.join()
print 'end of script'
如何正確執行此操作? 我試圖打印的數字:範圍(1,16),其中我從一個函數的輸出得到這個數字運行在一個單獨的線程。從線程收益項目
我明白,我不會得到這個範圍數字按順序排列,就像在單獨的線程中運行的函數的性質一樣
我也知道我可以簡單地在線程的函數本身中打印它們,但那不是重點,我想打印我已經輸出的東西在我的代碼的主線程或主要部分。
它的工作..然而,我想使用YIELD的原因是遠離大變量,所以我想保持q = Queue.Queue(2),然後我做q.get(真),但它滯後和從不打印?我怎樣才能讓隊列一次只保留2個項目,並且仍能獲得我想要的所有值? – MistahX 2011-06-12 23:03:23
那麼'q.get(True)'會永遠阻塞,所以當你的發生器完成時,沒有任何東西會被打印出來,它會永遠坐着。同樣用'q = Queue.Queue(2)'初始化'q'將限制你的'Queue'爲2個對象,你的'q.put(i)'調用阻塞直到有空間。我不確定你在問什麼,但另一種實現它的方式是在隊列上永遠保留'Queue'塊,但是放一些東西表明你的生產者已經完成了'Queue'並且擁有當看到所有生產者完成時,主線程跳出while循環。 – Hoons 2011-06-13 16:36:02