[Python] Client TCP con asyncio
Vinny Mautone
vinny74man a gmail.com
Gio 9 Nov 2017 07:40:06 CET
Questo è _run_once()
Help on method _run_once in module asyncio.base_events:
_run_once() method of asyncio.windows_events._WindowsSelectorEventLoop
instance
Run one full iteration of the event loop.
This calls all currently ready callbacks, polls for I/O,
schedules the resulting callbacks, and finally schedules
'call_later' callbacks.
Girando su i vari forum che parlano dell'argomento ho letto che era una
soluzione l'ho provata e funziona.
Per il client ho usato una classe che eredita da asyncio.protocol,
all'interno della quale c'è una funzione predefinita
connection_lost(), ed è li che fermo il loop con loop.stop()
questo è il main dello script
if __name__ == '__main__':
while True:
try:
host ='localhost'
port = 8442
username = 'python_tcp_client\n'
loop = asyncio.get_event_loop()
loop.run_until_complete(tcp_reconnect(username, loop, host,
port))
except KeyboardInterrupt:
break
except Exception as e:
print(e)
finally:
for task in asyncio.Task._all_tasks:
task.cancel()
loop._run_once()
loop.close()
Senza questa riga " except Exception as e: " il programma non si riavviava
ma si fermava per l'eccezione
""Event loop stopped before Future completed."
in questo modo tramite la print() la evidenzio ma tutto prosegue.
2017-11-08 23:35 GMT+01:00 Christian Barra <barrachri a gmail.com>:
>
>
> > On 8 Nov 2017, at 19:09, Vinny Mautone <vinny74man a gmail.com> wrote:
> >
> > Per i task sono riuscito a risolvere con queste tre righe
> >
> > for task in asyncio.Task._all_tasks:
> > task.cancel()
> > loop._run_once()
> >
> > scusate non so come mettere i tag per il codice.
> >
> > Adesso però devo risolvere questo:
> > "Event loop stopped before Future completed.”
>
> Non ho idea di cosa sia ._run_once() (non mi pare faccia parte delle
> public api di asyncio…..).
>
> L’errore e’ chiaro, hai (probabilmente) una coroutine wrappata in un
> future che non hai completato.
>
> Come lo stoppi il loop?
>
> Immagino tu abbia un:
>
> if __name__ == ‘__main__’:
>
> con qualche cosa sotto, giusto?
>
> ——
> Christian Barra
> Python Freelancer // Consultant // Trainer
> Board member of the EuroPython Society
> www.chrisbarra.xyz
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> https://lists.python.it/mailman/listinfo/python
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20171109/f833e294/attachment.html>
Maggiori informazioni sulla lista
Python