1

queue.join() を使用すると終了しない単純な python アプリがあります。以下はコードです:

import threading
import Queue

q = Queue.Queue()

for i in range(5):
    q.put("BLAH")

def worker():
    while True:
         print q.qsize()
         a = q.get()
         print q.qsize()
         q.task_done()
         print q.qsize()


for i in range(2):
    t = threading.Thread(target=worker())
    t.daemon = True
    t.start()

q.join()

また、threading.enumerate() を出力してから 2 秒間スリープするウォッチドッグ スレッドも作成しました。残っている唯一のスレッドは MainThread であり、キューのサイズは実際には 0 です。このスクリプトは決して終了しません。私はctrl + zを押してからそれを殺さなければなりません。どうしたの?

4

2 に答える 2

1
t = threading.Thread(target=worker)

ワーカー関数への参照を渡したい場合は、呼び出してはいけません。

于 2013-04-19T06:26:31.743 に答える