2015-12-28 10 views
7

Quando permetto asyncio debug in Python 3.5, vengono visualizzati messaggi come questo quasi ogni secondo:Asyncio in spam python3.5 con INFO

INFO:asyncio:poll 999.470 ms took 1001.159 ms: timeout 
INFO:asyncio:poll 999.264 ms took 1001.092 ms: timeout 
INFO:asyncio:poll 999.454 ms took 1001.059 ms: timeout 

Ecco un codice minimo che riproduce questo problema:

import asyncio 
import logging 
logging.basicConfig(level=logging.DEBUG) 
loop = asyncio.get_event_loop() 
loop.set_debug(True) 

async def f(delay): 
    for i in range(10): 
     await asyncio.sleep(delay) 

loop.run_until_complete(f(0.5)) 
# (nothing printed) 
loop.run_until_complete(f(1)) 
# INFO:asyncio:poll 999.470 ms took 1001.159 ms: timeout 
# INFO:asyncio:poll 999.264 ms took 1001.092 ms: timeout 
# INFO:asyncio:poll 999.454 ms took 1001.059 ms: timeout 
# ... 
loop.run_until_complete(f(2)) 
# INFO:asyncio:poll 1999.427 ms took 2001.112 ms: timeout 
# INFO:asyncio:poll 1999.393 ms took 2001.088 ms: timeout 
# INFO:asyncio:poll 1999.709 ms took 2001.758 ms: timeout 
# ... 

Questo non stampa messaggi se sleep ritardo è minore di 1 secondo, ma non se si tratta di> = 1.

è che il comportamento previsto? Come posso evitare tali messaggi?

Ho trovato questo problema quando si lavora con Muffin framework.

+0

sembra che questo problema è radicato nella 'lavoratore gunicorn aiohttp' del framework web: https://github.com/KeepSafe/aiohttp/blob/master/aiohttp/worker.py#L97 - chiama asyncio.sleep (1.0) che porta a questo messaggio quando il server non è occupato. – MarSoft

risposta

1

È possibile impostare livello di registrazione per asyncio modulo, ad esempio:

logging.getLogger('asyncio').setLevel(logging.WARNING) # Remove asyncio debug and info messages, but leave warnings. 

proposito, read about nomi registrazione sistema generale:

Il name è potenzialmente un valore gerarchico periodo separati, come foo.bar.baz (anche se potrebbe anche essere semplicemente foo, ad esempio). I logger più in basso nell'elenco gerarchico sono figli dei logger più in alto nell'elenco. Ad esempio, dato un logger con un nome di foo, i logger con i nomi di foo.bar, foo.bar.baz e foo.bam sono tutti discendenti di foo. La gerarchia dei nomi dei logger è analoga alla gerarchia dei pacchetti Python e identica ad essa se si organizzano i logger su base per modulo usando la costruzione consigliata logging.getLogger(__name__). Questo perché in un modulo, __name__ è il nome del modulo nello spazio dei nomi del pacchetto Python.