asyncio and Exception ignored in: <bound method _WindowsSelectorEventLoop.__del__

1,149 views
Skip to first unread message

Leslie Klein

unread,
Oct 22, 2015, 11:34:01 PM10/22/15
to python-tulip
I am building a bittorrent client using the python 3.4 asyncio library. I get up to a certain point in the protocol (receive Unchoke message from a remote peer) and then the remote peer closes the connection. Here is the output to the console. https://docs.python.org/2/reference/datamodel.html#object.__del__ explains some nuances with __del__. I assume I need to do something in my code, but I need a hint. Everytime my client receives the Unchoke message, this error occurs.

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

>> c:\Anaconda3\python .\message_types.py

received Handshake from peer 78.187.198.160
78.187.198.160: successfully read Handshake
received Handshake from peer 186.106.94.63
186.106.94.63: successfully read Handshake
78.187.198.160: successfully read Not Supported
186.106.94.63: successfully read Not Supported
received Bitfield from peer 78.187.198.160
78.187.198.160: successfully read Bitfield
received Bitfield from peer 186.106.94.63
186.106.94.63: successfully read Bitfield
186.106.94.63: wrote INTERESTED
186.106.94.63: client ready to receive Unchoke
received Have from peer 186.106.94.63
received Unchoke from peer 186.106.94.63
[WinError 10054] An existing connection was forcibly closed by the remote host

Exception ignored in: <bound method _WindowsSelectorEventLoop.__del__ of <_WindowsSelectorEventLoop running=False closed
=False debug=True>>
Traceback (most recent call last):
  File "c:\Anaconda3\lib\asyncio\base_events.py", line 361, in __del__
  File "c:\Anaconda3\lib\asyncio\selector_events.py", line 98, in close
  File "c:\Anaconda3\lib\asyncio\base_events.py", line 340, in close
  File "c:\Anaconda3\lib\logging\__init__.py", line 1262, in debug
  File "c:\Anaconda3\lib\logging\__init__.py", line 1409, in _log
  File "c:\Anaconda3\lib\logging\__init__.py", line 1419, in handle
  File "c:\Anaconda3\lib\logging\__init__.py", line 1481, in callHandlers
  File "c:\Anaconda3\lib\logging\__init__.py", line 853, in handle
  File "c:\Anaconda3\lib\logging\__init__.py", line 1040, in emit
  File "c:\Anaconda3\lib\logging\__init__.py", line 1030, in _open
NameError: name 'open' is not defined
Exception ignored in: <bound method Task.__del__ of <Task finished coro=<downloader() done, defined at .\message_types.p
y:934> exception=KeyError(None,) created at c:\Anaconda3\lib\asyncio\tasks.py:330>>
Traceback (most recent call last):
  File "c:\Anaconda3\lib\asyncio\tasks.py", line 94, in __del__
  File "c:\Anaconda3\lib\asyncio\futures.py", line 216, in __del__
  File "c:\Anaconda3\lib\asyncio\base_events.py", line 1037, in call_exception_handler
  File "c:\Anaconda3\lib\logging\__init__.py", line 1303, in error
  File "c:\Anaconda3\lib\logging\__init__.py", line 1409, in _log
  File "c:\Anaconda3\lib\logging\__init__.py", line 1419, in handle
  File "c:\Anaconda3\lib\logging\__init__.py", line 1481, in callHandlers
  File "c:\Anaconda3\lib\logging\__init__.py", line 853, in handle
  File "c:\Anaconda3\lib\logging\__init__.py", line 1040, in emit
  File "c:\Anaconda3\lib\logging\__init__.py", line 1030, in _open
NameError: name 'open' is not defined

Leslie Klein

unread,
Oct 23, 2015, 9:17:02 AM10/23/15
to python-tulip
I run the loop like this:
loop.run_until_complete(asyncio.wait(tasks))

tasks is a list: 1 task connects to each peer and 1 task runs the protocol to download data. Eventually all the connect tasks end. When the remote host shuts down, the download task ends.
If I don't add more tasks connect tasks to the loop (with a new set of peers), maybe this is what asyncio does.

Victor Stinner

unread,
Oct 23, 2015, 9:38:32 AM10/23/15
to Leslie Klein, python-tulip
It looks like you didn't close explicitly your loop. See the doc:
https://docs.python.org/dev/library/asyncio-dev.html#close-transports-and-event-loops

Victor
Reply all
Reply to author
Forward
0 new messages