<div dir="ltr">Questo è _run_once()<div><br><div><div>Help on method _run_once in module asyncio.base_events:</div><div><br></div><div>_run_once() method of asyncio.windows_events._WindowsSelectorEventLoop instance</div><div> Run one full iteration of the event loop.</div><div> </div><div> This calls all currently ready callbacks, polls for I/O,</div><div> schedules the resulting callbacks, and finally schedules</div><div> 'call_later' callbacks.</div></div></div><div><br></div><div>Girando su i vari forum che parlano dell'argomento ho letto che era una soluzione l'ho provata e funziona.</div><div><br></div><div>Per il client ho usato una classe che eredita da asyncio.protocol, all'interno della quale c'è una funzione predefinita</div><div>connection_lost(), ed è li che fermo il loop con loop.stop()</div><div><br></div><div>questo è il main dello script</div><div><br></div><div><div>if __name__ == '__main__':</div><div> while True:</div><div> try:</div><div> host ='localhost'</div><div> port = 8442</div><div> username = 'python_tcp_client\n'</div><div> loop = asyncio.get_event_loop()</div><div> loop.run_until_complete(tcp_reconnect(username, loop, host, port))</div><div> except KeyboardInterrupt:</div><div> break</div><div> except Exception as e:</div><div> print(e)</div><div> finally:</div><div> for task in asyncio.Task._all_tasks:</div><div> task.cancel()</div><div> loop._run_once()</div><div> loop.close()</div></div><div><br></div><div>Senza questa riga " except Exception as e: " il programma non si riavviava ma si fermava per l'eccezione</div><div>"<span style="font-size:12.8px">"Event loop stopped before Future completed."</span></div><div><span style="font-size:12.8px">in questo modo tramite la print() la evidenzio ma tutto prosegue.</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-11-08 23:35 GMT+01:00 Christian Barra <span dir="ltr"><<a href="mailto:barrachri@gmail.com" target="_blank">barrachri@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
<br>
> On 8 Nov 2017, at 19:09, Vinny Mautone <<a href="mailto:vinny74man@gmail.com">vinny74man@gmail.com</a>> wrote:<br>
><br>
> Per i task sono riuscito a risolvere con queste tre righe<br>
><br>
> for task in asyncio.Task._all_tasks:<br>
> task.cancel()<br>
> loop._run_once()<br>
><br>
> scusate non so come mettere i tag per il codice.<br>
><br>
> Adesso però devo risolvere questo:<br>
</span>> "Event loop stopped before Future completed.”<br>
<br>
Non ho idea di cosa sia ._run_once() (non mi pare faccia parte delle public api di asyncio…..).<br>
<br>
L’errore e’ chiaro, hai (probabilmente) una coroutine wrappata in un future che non hai completato.<br>
<br>
Come lo stoppi il loop?<br>
<br>
Immagino tu abbia un:<br>
<br>
if __name__ == ‘__main__’:<br>
<br>
con qualche cosa sotto, giusto?<br>
<div class="HOEnZb"><div class="h5"><br>
——<br>
Christian Barra<br>
Python Freelancer // Consultant // Trainer<br>
Board member of the EuroPython Society<br>
<a href="http://www.chrisbarra.xyz" rel="noreferrer" target="_blank">www.chrisbarra.xyz</a><br>
______________________________<wbr>_________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="https://lists.python.it/mailman/listinfo/python" rel="noreferrer" target="_blank">https://lists.python.it/<wbr>mailman/listinfo/python</a><br>
</div></div></blockquote></div><br></div>