Ich teste pysnmp asyncio Modul und als Start verwendet sample program zusammen mit der Dokumentation zur Verfügung gestellt. Wenn ich das Beispielprogramm ausführe, gibt es den Task was destroyed but it is pending!
Fehler. Ich habe SO nach ähnlichen Fragen überprüft und konnte nicht finden, was mit meinen (unerfahrenen) Augen falsch ist. Ich verwende Python 3.4.2 und asyncio die mit ihm kamen und pysnmp (4.3.2) auf Debian 8.5asyncio "Aufgabe wurde zerstört, aber sie steht noch aus!" in pysnmp Beispielprogramm
Das Programm, das ich mit (das gleiche wie das Beispielprogramm in pysnmp Dokumentation)
import asyncio
from pysnmp.hlapi.asyncio import *
@asyncio.coroutine
def getone(snmpEngine, hostname):
errorIndication, errorStatus, errorIndex, varBinds = yield from getCmd(
snmpEngine,
CommunityData('public'),
UdpTransportTarget(hostname),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0))
)
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (
errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'
)
)
else:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
@asyncio.coroutine
def getall(snmpEngine, hostnames):
for hostname in hostnames:
yield from getone(snmpEngine, hostname)
snmpEngine = SnmpEngine()
loop = asyncio.get_event_loop()
loop.run_until_complete(getall(snmpEngine, [('demo.snmplabs.com', 1161),
('demo.snmplabs.com', 2161),
('demo.snmplabs.com', 3161)]))
Fehler ist:
Executing wait_for= cb=[_raise_stop_error() at /usr/lib/python3.4/asyncio/base_event
s.py:101] created at /usr/lib/python3.4/asyncio/base_events.py:264> took 0.460 seconds
SNMPv2-MIB::sysDescr.0 = SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m
SNMPv2-MIB::sysDescr.0 = SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m
SNMPv2-MIB::sysDescr.0 = SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m
Task was destroyed but it is pending!
source_traceback: Object created at (most recent call last):
File "multiple-sequential-queries.py", line 58, in
('demo.snmplabs.com', 3161)]))
File "/usr/lib/python3.4/asyncio/base_events.py", line 271, in run_until_complete
self.run_forever()
File "/usr/lib/python3.4/asyncio/base_events.py", line 244, in run_forever
self._run_once()
File "/usr/lib/python3.4/asyncio/base_events.py", line 1075, in _run_once
handle._run()
File "/usr/lib/python3.4/asyncio/events.py", line 120, in _run
self._callback(*self._args)
File "/usr/lib/python3.4/asyncio/tasks.py", line 237, in _step
result = next(coro)
File "/usr/lib/python3.4/asyncio/coroutines.py", line 79, in __next__
return next(self.gen)
File "multiple-sequential-queries.py", line 50, in getall
yield from getone(snmpEngine, hostname)
File "/usr/lib/python3.4/asyncio/coroutines.py", line 79, in __next__
return next(self.gen)
File "multiple-sequential-queries.py", line 31, in getone
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0))
File "/usr/lib/python3.4/asyncio/coroutines.py", line 79, in __next__
return next(self.gen)
File "/usr/lib/python3.4/asyncio/coroutines.py", line 141, in coro
res = func(*args, **kw)
File "/usr/local/lib/python3.4/dist-packages/pysnmp/hlapi/asyncio/cmdgen.py", line 138, in getCmd
addrName, paramsName = lcd.configure(snmpEngine, authData, transportTarget)
File "/usr/local/lib/python3.4/dist-packages/pysnmp/hlapi/lcd.py", line 87, in configure
transport
File "/usr/local/lib/python3.4/dist-packages/pysnmp/entity/config.py", line 308, in addTransport
transport)
File "/usr/local/lib/python3.4/dist-packages/pysnmp/carrier/asyncio/dispatch.py", line 70, in registerTransport
self.loopingcall = asyncio.async(self.handle_timeout())
task: :4> wait_for= created at /usr/local/lib/python3.4/dist-packages/pysnmp/carrier/asyncio/dispatch.py:70>
Irgendwelche Hilfe, zum heraus herauszufinden ist sehr geschätzt!
Danke.
Das sieht aus wie ein Fehler in pysnmp im Zusammenhang mit der periodischen Timer-Funktion Abbruch beim Herunterfahren. Hier finden Sie weitere Informationen zum Thema https://docs.python.org/3/library/asyncio-dev.html#asyncio-pending-task-destroyed. Das Öffnen eines Problems oder das Senden von PR in GitHub kann ein Weg sein. ;) –
Danke! Lass mich ein Problem aufmachen. – Raj