Python多线程基本问题

时间:2015-09-08 10:40:15

标签: python multithreading mutex

我试图了解互斥在多线程应用程序中是如何工作的,但我有些疑惑。在我的情况下,我有从设备读取的线程,写入设备的线程和同步线程。在同步线程中,我有一个这种形式的计时器:

def CheckConnection(self):
        .   .   .
            threading.Timer(1, self.CheckConnection).start()

此计时器定期运行CheckConnection功能。

你可以告诉我:

  1. 当线程被锁定(获取)时,意味着线程停止执行并等待?这是暂停吗?

  2. 当我启动同步线程,我的checkConnection函数执行并且计时器启动,同步线程被锁定后会发生什么...这将停止计时器并执行CheckConnection函数?

1 个答案:

答案 0 :(得分:0)

  1. mymutex.acquire()调用将阻止调用它的线程,直到互斥锁可用,然后锁定互斥锁(阻止调用mymutex.acquire()的任何其他线程),然后返回,以便线程可以继续执行。对mymutex.release()的调用会释放/解锁互斥锁,mymutex.acquire()上阻塞的最旧线程会锁定互斥锁并返回,即取消阻塞此其他线程。
  2. self.CheckConnection是否与def CheckConnection()中定义的功能相同?所以你试图让每1个(在你的情况下)第二个调用CheckConnection函数?在Python threading.timer - repeat function every 'n' seconds
  3. 的最佳答案中有一个很好的描述如何执行此操作

    使用互斥锁的每个线程都应该执行以下操作:

    themutex.acquire()
    try:
        print('Do some stuff')
    finally:
        themutex.release()
    

    一般来说,获取和发布之间的代码,即“做一些事情”,应尽可能快,因为获取互斥锁的这些代码段的最大持续时间也是另一个线程被阻塞的最大时间(除非有多个线程被阻塞,显然最大延迟可能会更长)。