擅长:python、mysql、java
<p>您正在对您的<code>input_queue</code>调用阻塞get,没有超时。在<code>logData</code>的任一部分中,如果调用<code>input_queue.get()</code>并且队列为空,则它将无限期阻塞,从而阻止<code>logging_thread</code>到达完成。</p>
<p>要修复此问题,您需要调用<code>input_queue.get_nowait()</code>或将超时传递给<code>input_queue.get()</code>。</p>
<p>我的建议是:</p>
<pre><code>def logData(input_queue, stop_event):
n = 0
while not stop_event.is_set():
try:
d = input_queue.get_nowait()
if d.startswith("DATA:"):
print "LOG: " + d
n += 1
except Queue.Empty:
time.sleep(1)
return
</code></pre>
<p>您还向线程发出终止的信号,但不是等待它们这样做。考虑在<code>main</code>函数中执行此操作。</p>
<pre><code>try:
while True:
time.sleep(10)
except (KeyboardInterrupt, SystemExit):
stop_event.set()
collection_thread.join()
logging_thread.join()
</code></pre>