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.
On Thursday, October 22, 2015 at 11:34:01 PM UTC-4, Leslie Klein wrote: > > 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 > >
