Solving thread cleanup on paramiko

前端 未结 3 1960
时光取名叫无心
时光取名叫无心 2021-01-11 16:02

I have an automated process using paramiko and have this error:

Exception in thread Thread-1 (most likely raised during interpreter 
shutdown)

....
....
<         


        
相关标签:
3条回答
  • 2021-01-11 16:48

    Close your connections in the normal program control flow, not in __del__, as @THC4k said, it's not a deconstructor, and in general, you shouldn't need to use __del__ (of course there are exceptions).

    If you're creating your own threads, you need to .setDaemon(True) if you want them to exit normally when the main thread exits.

    0 讨论(0)
  • 2021-01-11 16:51

    __del__ is not a deconstructor. It's called when you delete a object's last name, which doesn't nessesarily happen when you exit the interpreter.

    Anything that manages a context, such as connections, is a context manager For example there is closing:

    with closing(make_connection()) as conn:
        dostuff()
    
    # conn.close() is called by the `with`
    

    Anyways, this exception happens because you have a daemonic thread that is still trying to do it's work while the interpreter is already shutting down.

    I think you can only fix this by writing code that stops all running threads before exiting.

    0 讨论(0)
  • 2021-01-11 16:55

    I now, is not the case. But a find this discussion, searching a problem whit my wxpython app.

    Solve it to add a close event to the main frame. So all the thread's will be close.

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

    I hope this cant help to anyone.

    0 讨论(0)
提交回复
热议问题