美好的一天,
我正在制作一个有两个线程的程序:主要一个程序处理GUI并进行数据分析,另一个负责测量。我有两个线程主要是为了防止GUI冻结并允许用户在任期前停止测量。
代码可以大致总结如下:
SyncQueue = queue.Queue(maxsize=1)
WorkThread = threading.Thread(target=measurement_function, args=SyncQueue)
WorkThread.daemon = True
WorkThread.start()
while True:
QApplication.processEvents()
# Wait for new measurements to be available.
UnusedVariable = SyncQueue.get(block=True, timeout=10)
SyncQueue.task_done()
# Do some stuff with the graph (autoscale, sliding average, etc).
if self.Dict["Measurements finished?"] is True:
break
...
def measurement_function(self, SyncQueue):
while <condition>:
# Take measurements.
# Put them in the graph.
# Allow the other loop to work once.
SyncQueue.put("whatever", block=True, timeout=10)
# Terminate the other loop.
self.Dict["Measurements finished"] = True
使用队列同步两个循环效果很好。传递的值无关紧要,这里有用的部分实际上是block=True
机制。它可以工作,但感觉有点黑。 同步两个循环的干净方法是什么?
我了解了lock.acquire(blocking=True)
和lock.release()
的信息,但是对于我来说,目前尚不清楚队列还是锁是首选。预先谢谢你。