For further information, please refer to the following:
- A semaphore is similar to a mutex but allows for an arbitrary number of locks to be taken rather than just a single lock. You can read more about Qt's implementation, the QSemaphore class, at https://doc.qt.io/qt-5/qsemaphore.html
- David Beazley's talk from PyCon 2010, available at https://www.youtube.com/watch?v=Obt-vMVdM8s, provides deeper insight into the operation of the Python GIL