2016-10-26 2 views
0

Я использую PyCharm 2016.2.3 (Build # PY-162.1967.10). Я не могу заставить отладчик остановиться в любой точке останова из основного потока, независимо от того, является ли свойство suspend для точки останова: All или Thread; или если это единственная точка останова во всей программе. Threading реализуется с QObject, перемещенным в QThread. Это простой код, чтобы показать проблему. Точка останова в любой части вторичного потока (внутри Master.do() или Worker.run()) не будет удалена.Почему отладчик Pycharm не останавливается в точке останова вне основного потока?

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() 

ответ

Смежные вопросы