我在Windows 10计算机上使用Python 3.7(带有用于 GUI的PyQt5 )。我的应用程序需要一些多线程。为此,我使用.QThread()
我需要用互斥锁保护一些代码。我想我有以下两个选择:使用 Pythonthreading
模块的锁或使用QMutex()
.
1. 使用 threading.Lock() 进行保护
这就是我制作互斥锁的方式:
import threading
...
self.mutex = threading.Lock()
以及我如何使用它:
def protected_function(self):
if not self.mutex.acquire(blocking=False):
print("Could not acquire mutex")
return
# Do very important
# stuff here...
self.mutex.release()
return
您可以在此处找到 Python 文档:https ://docs.python.org/3/library/threading.html#threading.Lock
2. 使用 QMutex() 进行保护
要制作互斥锁:
from PyQt5.QtCore import *
...
self.mutex = QMutex()
以及如何使用它:
def protected_function(self):
if not self.mutex.tryLock():
print("Could not acquire mutex")
return
# Do very important
# stuff here...
self.mutex.unlock()
return
QMutex()
你可以在这里找到 Qt5 文档: http ://doc.qt.io/qt-5/qmutex.html
3. 兼容性
我想知道:
是否
threading.Lock()
与用 制成的螺纹兼容QThread()
?QMutex()
与普通的 Python 线程兼容吗?
换句话说,如果这些事情有点混在一起,这有什么大不了的吗?- 例如:一些python线程在应用程序中运行,在一些QThread的旁边,一些东西受保护threading.Lock()
,其他东西受保护QMutex()
。