Python 解决paramiko上的线程清理问题
我有一个使用paramiko的自动化流程,出现以下错误:Python 解决paramiko上的线程清理问题,python,ssh,paramiko,Python,Ssh,Paramiko,我有一个使用paramiko的自动化流程,出现以下错误: Exception in thread Thread-1 (most likely raised during interpreter shutdown) .... .... <type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'error' 线程thread-1中的异常(很可能在解释器期间引发 (关闭) .... .... :
Exception in thread Thread-1 (most likely raised during interpreter
shutdown)
....
....
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute
'error'
线程thread-1中的异常(很可能在解释器期间引发
(关闭)
....
....
:“非类型”对象没有属性
“错误”
我知道这是清理/线程中的一个问题,但我不知道如何解决它
我有最新的版本(1.7.6),根据,它已经解决了,所以我直接下载代码,但仍然得到错误
失败发生在winxp/win2003下的Python 2.5/2.6上
我在
\uuu del\uu
析构函数中关闭连接,然后在脚本结束之前关闭它,所有这些都不起作用。是否还有更多,使用此选项,错误发生得更早,因此可能与解释器关闭无关???\uuu del_u
不是解构器。当您删除对象的姓氏时会调用它,而当您退出解释器时通常不会发生这种情况
管理上下文的任何内容(如连接)都是一个示例,例如:
无论如何,发生这种异常是因为您有一个守护线程在解释器已经关闭时仍在尝试执行它的工作
我想你只能通过在退出之前编写代码来解决这个问题。在正常的程序控制流中关闭连接,而不是在
\uuu del\uuuu
中,正如@THC4k所说,它不是解构器,一般来说,你不需要使用\uu del\uuuu
(当然也有例外)
如果您正在创建自己的线程,那么如果希望它们在主线程退出时正常退出,则需要.setDaemon(True)。I现在不是这样。但是,我可以通过我的wxpython应用程序找到这个讨论,搜索一个问题 解决该问题以向主框架添加关闭事件。所以所有的线程都将关闭
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
super(MyFrame, self).__init__(*args, **kwargs)
# Attributes
self.panel = MainPanel(self)
# Setup
path = os.path.abspath("./comix.png")
icon = wx.Icon(path, wx.BITMAP_TYPE_PNG)
self.SetIcon(icon)
# Layout
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.panel, 1, wx.EXPAND)
self.SetSizer(sizer)
self.CreateStatusBar()
# Event Handlers
self.Bind(wx.EVT_CLOSE, self.OnClose)
def OnClose(self, event):
ssh.close()
winssh.close()
event.Skip()
我希望这对任何人都没有帮助。并且在python 2.5+上存在解构器???或者如何清洁螺纹,你知道吗?对不起,但在这种情况下,我newbie@Jochen当解释器关闭时,我们不希望所有守护进程线程都正常关闭吗?您能给出此错误消息的确切原因吗?
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
super(MyFrame, self).__init__(*args, **kwargs)
# Attributes
self.panel = MainPanel(self)
# Setup
path = os.path.abspath("./comix.png")
icon = wx.Icon(path, wx.BITMAP_TYPE_PNG)
self.SetIcon(icon)
# Layout
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.panel, 1, wx.EXPAND)
self.SetSizer(sizer)
self.CreateStatusBar()
# Event Handlers
self.Bind(wx.EVT_CLOSE, self.OnClose)
def OnClose(self, event):
ssh.close()
winssh.close()
event.Skip()