0
我有一個for
循環3項。在for
循環內,我爲每個項目生成了15個線程。這些都將數據返回到我的GUI,但會發生什麼情況是執行for
循環,所有3個項目並貫穿始終,並且會產生45個線程。我試圖運行第一個項目,等到15個線程完成,然後運行第二個項目。我需要做所有這些,而不使用join()
。隊列阻塞主線程
我想這可以通過queue
完成,但有阻塞的問題。當我嘗試以下,它永遠不會移動到第二組的15個線程:
while True:
try:
data = q.get(False)
except Query.Empty():
data = None
這將停止阻塞問題,使我的GUI與每個15個線程執行的功能不斷更新,但一旦他們執行,它只是結束並且不會繼續for
循環。這是有問題的循環:
def thing_1(names):
def thready():
print "Hello!"
q.put("Done")
for name in names:
print "Working on " + name
t1 = threading.Thread(target=thready)
t1.start()
# Then put 'while True' here
你也可以考慮增加一個小的(25毫秒?)睡眠進入while循環,以避免您的GUI線程佔用了太多的CPU時間。 – holdenweb
似乎是超越'except'部分的問題。如果我用'print'Hello'''替換新的if語句,它甚至不會打印。 –
聽起來可能你已經在你的代碼中混淆了縮進,但是示例上下文並不足以決定。 while循環應該和上面的for循環相同。通過插入'print'調用來檢查while循環實際上是否按照您的想法運行。 – holdenweb