如何在pycharm中使用多处理时进行调试

时间:2015-12-02 02:15:40

标签: python multiprocessing pycharm

我正在使用pycharm社区版中的anaconda2调试多进程程序。 它有几个后台工作进程。在收到任务之前,工作进程将检查输入队列以在不休眠的情况下检索任务。事实上,我只对主要过程感兴趣。但是pycharm调试器总是步入子进程,似乎主进程一直没有工作,而且任务从未发送过。如何使调试器脱离子进程? worker子进程如下所示:

class ILSVRC_worker:

...

def run(self):
    cfg_parser = ConfigParser.ConfigParser()
    cfg_parser.read(self.cfg_path)
    data_factory = ILSVRC_DataFactory(cfg_parser)
    logger = mp.log_to_stderr(logging.INFO)
    while True:
        try:
            annotation_path = self.que_in.get(True,0.1)
        except Queue.Empty:
            continue
        if annotation_path is None:
            # to exit the subprocess
            logger.info('exit the worker process')
            break
        ...

1 个答案:

答案 0 :(得分:4)

我可以想到实现这一目标的两种方法,但不幸的是,我认为社区版本是不可能的。

  • 如果您拥有流程的PID,可以尝试使用工具>附加到流程...功能(我不知道社区版中是否提供此功能)附加到该流程。如果您使用Pool,则很难,因为您不知道作业分配到哪个进程。
  • 另一种方法是使用远程调试器并在调度的python进程中连接它。这仅适用于专业版

我最终测试了我的代码而没有任何多处理