Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python asyncio“;任务已被销毁,但它处于挂起状态&引用;在pysnmp示例程序中_Python_Python 3.x_Python Asyncio_Pysnmp - Fatal编程技术网

Python asyncio“;任务已被销毁,但它处于挂起状态&引用;在pysnmp示例程序中

Python asyncio“;任务已被销毁,但它处于挂起状态&引用;在pysnmp示例程序中,python,python-3.x,python-asyncio,pysnmp,Python,Python 3.x,Python Asyncio,Pysnmp,我正在测试pysnmp异步IO模块,并在开始时使用随文档提供的。当我运行示例程序时,它给出了任务已被销毁,但它处于挂起状态错误。我检查了类似的问题,没有发现我(没有经验的)眼睛有什么问题。我正在使用Python 3.4.2和它附带的asyncio,以及Debian 8.5上的pysnmp(4.3.2) 我使用的程序(与pysnmp文档中的示例程序相同) 导入异步 从pysnmp.hlapi.asyncio导入* @异步协同程序 def getone(snmpEngine,主机名): error

我正在测试pysnmp异步IO模块,并在开始时使用随文档提供的。当我运行示例程序时,它给出了
任务已被销毁,但它处于挂起状态错误。我检查了类似的问题,没有发现我(没有经验的)眼睛有什么问题。我正在使用Python 3.4.2和它附带的asyncio,以及Debian 8.5上的pysnmp(4.3.2)

我使用的程序(与pysnmp文档中的示例程序相同)


导入异步
从pysnmp.hlapi.asyncio导入*
@异步协同程序
def getone(snmpEngine,主机名):
errorIndication、errorStatus、errorIndex、varBinds=从getCmd获得的收益(
snmpEngine,
CommunityData(“公共”),
UDPTTransportTarget(主机名),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB','sysDescr',0))
)
如果错误指示:
打印(错误指示)
elif错误状态:
打印(“%s”位于%s'%(
errorStatus.prettyPrint(),
errorIndex和varBinds[int(errorIndex)-1][0]或“?”
)
)
其他:
对于varBind中的varBind:
打印('='.join([x.prettyPrint()用于varBind中的x]))
@异步协同程序
def getall(snmpEngine,主机名):
对于主机名中的主机名:
来自getone的收益(snmpEngine,主机名)
snmpEngine=snmpEngine()
loop=asyncio.get\u event\u loop()
循环运行直到完成(getall(snmpEngine,[('demo.snmplabs.com',1161),
('demo.snmplabs.com',2161),
('demo.snmplabs.com',3161)])
错误是:



     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>

非常感谢您的帮助


谢谢。

pysnmp中有一个内部计时器功能,用于处理缓存、重试等。通过异步IO传输,计时器由异步IO
未来
驱动。您观察到的消息警告您,在主循环关闭之前,Future对象仍处于挂起状态

要解决此问题,您需要在完成所有SNMP I/O后取消挂起的计时器任务。一种[hackerish]方法是将以下代码段附加到您提到的示例脚本中:

...

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)]))

# run a coroutine to cancel pending timer task

from pysnmp.hlapi.asyncore.cmdgen import lcd

@asyncio.coroutine
def unconfigure(snmpEngine, authData=None):
    lcd.unconfigure(snmpEngine, authData)

loop.run_until_complete(unconfigure(snmpEngine))

我正在努力将类似的协同程序添加到pysnmp中,这样您就可以直接运行它。

这看起来像pysnmp中的一个错误,与关机时定期定时器功能取消有关。这里有更多关于这件事的信息。在github上发布一期或发送PR可能是一个不错的选择。;)谢谢让我打开一个问题。