[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