The signals are one of the few elements of the QObjects that are thread-safe so it is not necessary to protect the data. So you can have different types of signals connected to the same slot.
Since the signals are thread-safe then Qt recommended to communicate QObjects that live in different threads.
I am learning how to use PyQt5 and there are quite a few points that elude me.
I have started implementing QThreads to replace the threads I have been using in my UI as I realised that mixing threads and QThreads could possibly lead to issues later and have started using pyqtSignal simultaneously
So far I have seen that the pyqtSygnal needs to be implemented on a class level to be able to work ( putting it in a class constructor does not work )
In the architecture I use currently, I have a pyqtSignal that is instantiated in the main thread and is then used by all of the child threads. This is due to having one class that is responsible for my logs of all the program.
I am unsure if this is a good implementation or not.
Here are my questions :

are pyqtSignals thread safe ?I know that they use a queue system to be thread safe but is the emit() method itself thread safe ? My understanding of them is a bit limited
Do I need to protect my pyqtSignals with locks ?
Can I have multiple different signals emitting to the same slot without having any issues ?
PyQt5 : are pyqtSignals thread safe?