Python3:如何同步在两个不同线程上运行的两个循环?

时间:2018-08-20 08:29:41

标签: python-3.x python-multithreading

美好的一天,

我正在制作一个有两个线程的程序:主要一个程序处理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()的信息,但是对于我来说,目前尚不清楚队列还是锁是首选。预先谢谢你。

0 个答案:

没有答案