Я использую PyCharm 2016.2.3 (сборка № PY-162.1967.10). Я не могу заставить отладчик остановиться в любой точке останова вне основного потока, независимо от того, является ли свойство приостановки для точки останова All или Thread; или если это единственная точка останова во всей программе. Потоки реализованы с QObject, перемещенным в QThread. Это простой код, чтобы показать проблему. Точка останова во вторичном потоке (внутри Master.do() или Worker.run()) не сработает.
import sys
from PyQt5.QtCore import QCoreApplication, QObject, QThread, pyqtSignal, pyqtSlot
class Worker(QObject):
"""
Generic worker.
"""
start = pyqtSignal(str)
finished = pyqtSignal()
def __init__(self, function):
QObject.__init__(self)
self._function = function
self.start.connect(self.run)
@pyqtSlot()
def run(self):
#TODO Breakpoints inside this method will not be hit.
self._function()
self.finished.emit()
class Master(QObject):
"""
An object that will use the worker class.
"""
def __init__(self):
QObject.__init__(self)
def do(self):
#TODO Breakpoints inside this method will not be hit.
print("All done.")
QCoreApplication.quit()
def main():
app = QCoreApplication(sys.argv)
master = Master()
worker = Worker(master.do)
thread = QThread()
worker.moveToThread(thread)
thread.started.connect(worker.run)
# Terminating thread gracefully, or so.
worker.finished.connect(thread.quit)
worker.finished.connect(worker.deleteLater)
thread.finished.connect(thread.deleteLater)
thread.start()
sys.exit(app.exec_())
if __name__ == "__main__":
main()