Python 多线程基础题

Python multithread basic questions

我正在尝试了解互斥量在多线程应用程序中的工作原理,但我有一些疑问。在我的例子中,我有从设备读取的线程、写入设备的线程和同步线程。在同步线程中,我有一个这种形式的计时器:

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

此计时器定期运行 CheckConnection 函数。

你能告诉我吗:

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

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

  1. mymutex.acquire() 调用将阻塞调用它的线程,直到互斥量可用,然后锁定互斥量(因此阻塞调用 mymutex.acquire() 的任何其他线程),然后 return 所以线程可以继续执行。调用 mymutex.release() releases/unlocks 互斥锁和阻塞在 mymutex.acquire() 上的最旧线程将锁定互斥锁和 return,即解锁另一个线程。
  2. self.CheckConnection 是否与您在 def CheckConnection() 中定义的函数相同?所以你试图让 CheckConnection 函数每 1 秒(在你的情况下)调用一次?在此处的最佳答案中有关于如何执行此操作的很好描述 Python threading.timer - repeat function every 'n' seconds

每个使用互斥锁的线程都应该做类似的事情:

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

一般来说,获取和释放之间的代码,即 'do some stuff',应该尽可能快,因为获取互斥量的这些代码部分的最大持续时间也是另一个代码的最大持续时间线程将被阻塞(除非几个线程被阻塞,显然最大延迟可以变得更长)。