先说说我的情况,这样可以让你对号入座。

1. 我是Pycharm的Python解释器连接远程的实验室linux服务器。也就是说,你猜到了,我的是Pycharm专业版,因为专业版才有远程连接这个功能。

2. 我运行代码一切正常。但是在调试的时候有点不对劲。除了上述frames are not available, 在Variable那里还显示:connected。另外,第一步调试可以成功调到你的任何一个断点,但是此时console几乎是挂掉的,查看变量没反应,然后点击下一步调试,直接无终止运行下去。

(我卡在这里很久,因为运行一切正常嘛,就是调试卡住了。一开始我以为项目太大了?导致那些数据变量都传不过来,本地内存存不下?后面想想不至于)

 

后来终于发现问题了,前方高能!!!

pycharm运行过程出现Plesae select a valid Python imterpreter pycharm frames are not available_多线程

 


我的代码中使用了多线程,即下面的num_workers=10。多线程在Linux服务器上运行是没有问题的。

1 dataloader = DataLoader(dataset, 
2                         batch_size=args.batch_size, 
3                         shuffle=True, 
4                         num_workers=10,
5                         collate_fn=MyDataset.collate_fn)

但是调试的时候会出现问题,我的猜测是我们的pycharm调试界面只支持主进程,线程开了之后就不能用了。

正如我上面所展示的,上面只是DataLoader的定义,还没有正式使用这个东西,所以调试功能在正式使用多线程之前一切正常

但是到了下面之后,emurate(dataloader)开始正式使用上面定义的多线程,从此往后,Pycharm调试界面将会卡死

for epoch in range(args.epochs):
        model.train()
        epoch_loss = []
        for idx, feed_dict in enumerate(dataloader):
            print(idx)

 所以解决方法很简单了,不管你的代码是不是和我一样,请检查你的代码是否用了多线程。运行的时候开启多线程加快运行速度,但是调试的时候在代码中把多线程关闭!!!

dataloader = DataLoader(dataset, 
                        batch_size=args.batch_size, 
                        shuffle=True, 
                        num_workers=0, #或者直接不要这个参数,默认是0
                        collate_fn=MyDataset.collate_fn)

 问题解决!!

这个问题困扰了我一下午,因为多线程调试并不会报错,只是用不了。