2015-05-01 17 views
12

Vorrei abilitare il rilevamento di coroutine non ceduto di Asyncio, ma non ci sono riuscito.Esempio di debug di asyncio di Python

Questo semplice codice implementa le raccomandazioni su:
https://docs.python.org/3/library/asyncio-dev.html#asyncio-logger

ma in realtà non prendere il 'manichino' coroutine non-dato.

import sys, os 
import asyncio 
import logging 
import warnings 

os.environ['PYTHONASYNCIODEBUG'] = '1' 
logging.basicConfig(level=logging.DEBUG) 
warnings.resetwarnings() 

@asyncio.coroutine 
def dummy(): 
    print('yeah, dummy ran!!') 

@asyncio.coroutine 
def startdummy(): 
    print('creating dummy') 
    dummy() 

if __name__ == '__main__': 
    lp = asyncio.get_event_loop() 
    lp.run_until_complete(startdummy()) 

mi aspettavo che il programma sarebbe finita con un avvertimento circa l'coroutine 'manichino', creato ma non ceduto da.

In realtà, i risultati sono:

DEBUG:asyncio:Using selector: SelectSelector 
creating dummy 
sys:1: ResourceWarning: unclosed <socket object at 0x02DCB6F0> 
c:\python34\lib\importlib\_bootstrap.py:2150: ImportWarning: sys.meta_path is empty 
sys:1: ResourceWarning: unclosed <socket object at 0x02DE10C0> 

nessun accenno di un coroutine abbandonata. Cosa mi manca?

risposta

19

asyncio esegue il controllo per PYTHONASYNCIODEBUG sull'importazione del modulo.

Quindi è necessario nell'ambiente di setup variabile prima molto prima importazione asyncio:

import os 
os.environ['PYTHONASYNCIODEBUG'] = '1' 
import asyncio 

# rest of your file 
+0

che era, grazie. – Rdbhost

+0

s/import sys/import os/ – djh

+0

Risolto. @ djh grazie! –