<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><div class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""></div></div></div></div></div></div></div></div></div></div></div>
</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On 9 Nov 2017, at 07:40, Vinny Mautone <<a href="mailto:vinny74man@gmail.com" class="">vinny74man@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Questo è _run_once()<div class=""><br class=""><div class=""><div class="">Help on method _run_once in module asyncio.base_events:</div><div class=""><br class=""></div><div class="">_run_once() method of asyncio.windows_events._WindowsSelectorEventLoop instance</div><div class="">    Run one full iteration of the event loop.</div><div class="">    </div><div class="">    This calls all currently ready callbacks, polls for I/O,</div><div class="">    schedules the resulting callbacks, and finally schedules</div><div class="">    'call_later' callbacks.</div></div></div><div class=""><br class=""></div></div></div></blockquote><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="">Girando su i vari forum che parlano dell'argomento  ho letto che era una soluzione l'ho provata e funziona.</div></div></div></blockquote><div><br class=""></div><div><br class=""></div><div><br class=""></div>L’underscore all’inizio di _run_once, mi fa pensare che non sia qualcosa da utilizzare…<div class=""><br class=""></div><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hai per caso un link alla documentazione?</div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""></div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""></div></div></div></div></div></div></div></div></div></div></div></div><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Per il client ho usato una classe che eredita da asyncio.protocol, all'interno della quale c'è una funzione predefinita</div><div class="">connection_lost(), ed è li che fermo il loop con loop.stop()</div></div></div></blockquote><div><br class=""></div><div>Perche fermi il loop dall’interno di un future?</div><div><br class=""></div><div><a href="https://docs.python.org/3/library/asyncio-protocol.html#asyncio.BaseProtocol.connection_lost" class="">https://docs.python.org/3/library/asyncio-protocol.html#asyncio.BaseProtocol.connection_lost</a></div><div><br class=""></div><div>Non hai più’ senso definire un async def tcp_reconnect da utilizzare come callback?</div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">questo è il main dello script</div><div class=""><br class=""></div><div class=""><div class="">if __name__ == '__main__':</div><div class="">    while True:</div><div class="">        try:</div><div class="">            host ='localhost'</div><div class="">            port = 8442</div><div class="">            username = 'python_tcp_client\n'</div><div class="">            loop = asyncio.get_event_loop()</div><div class="">            loop.run_until_complete(tcp_reconnect(username, loop, host, port))</div><div class="">        except KeyboardInterrupt:</div><div class="">            break</div><div class="">        except Exception as e:</div><div class="">            print(e)</div><div class="">        finally:</div><div class="">            for task in asyncio.Task._all_tasks:</div><div class="">                task.cancel()</div><div class="">            loop._run_once()</div><div class="">    loop.close()</div></div><div class=""><br class=""></div><div class="">Senza questa riga " except Exception as e: " il programma non si riavviava ma si fermava per l'eccezione</div><div class="">"<span style="font-size:12.8px" class="">"Event loop stopped before Future completed."</span></div><div class=""><span style="font-size:12.8px" class="">in questo modo tramite la print() la evidenzio ma tutto prosegue.</span></div></div></div></blockquote></div><br class=""></div><div class="">Probabilmente il while True va all’interno di tcp_connect o reconnect.</div><span class="">asyncio.ensure_future(</span>tcp_reconnect(username, loop, host, port))<div class="">loop.run_until_complete diventa run_forever.<br class=""><div class="">Except per il Keyboard diventa un pass o qualcos’altro.</div><div class=""><br class=""></div><div class="">loop._run_once() lo toglierei, come dicevo prima probabilmente stai accedendo a delle private api di asyncio.</div><div class=""><br class=""></div><div class="">Per i Tasks, devi capire se li vuoi consumare (con gather per esempio) o semplicemente cancellare.</div><div class=""><br class=""></div><div class="">Alla fine loop.close()</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">——</div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div>Christian Barra</div><div>Python Freelancer // Consultant // Trainer<br class="">Board member of the EuroPython Society</div><div><a href="http://www.chrisbarra.xyz" class="">www.chrisbarra.xyz</a></div></div></div></body></html>