[Python] Client TCP con asyncio

Vinny Mautone vinny74man a gmail.com
Sab 11 Nov 2017 13:55:44 CET


Scusa cosa intendi per consumare il task con gather?
Io per il momento lo sto semplicemente cancellando, perchè se non ho
connessione col server non mi interessa che fine fa, però vorrei capire
cosa intendi col gather.

Grazie

2017-11-09 9:41 GMT+01:00 Christian Barra <barrachri a gmail.com>:

>
>
> On 9 Nov 2017, at 07:40, Vinny Mautone <vinny74man a gmail.com> wrote:
>
> 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.
>
>
>
>
> L’underscore all’inizio di _run_once, mi fa pensare che non sia qualcosa
> da utilizzare…
>
> Hai per caso un link alla documentazione?
>
>
>
> 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()
>
>
> Perche fermi il loop dall’interno di un future?
>
> https://docs.python.org/3/library/asyncio-protocol.html#
> asyncio.BaseProtocol.connection_lost
>
> Non hai più’ senso definire un async def tcp_reconnect da utilizzare come
> callback?
>
>
>
> 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.
>
>
> Probabilmente il while True va all’interno di tcp_connect o reconnect.
> asyncio.ensure_future(tcp_reconnect(username, loop, host, port))
> loop.run_until_complete diventa run_forever.
> Except per il Keyboard diventa un pass o qualcos’altro.
>
> loop._run_once() lo toglierei, come dicevo prima probabilmente stai
> accedendo a delle private api di asyncio.
>
> Per i Tasks, devi capire se li vuoi consumare (con gather per esempio) o
> semplicemente cancellare.
>
> Alla fine loop.close()
>
>
> ——
> 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/20171111/6452866f/attachment.html>


Maggiori informazioni sulla lista Python