Python 3.x 从期货到异步
我对如何使用asyncio处理以下内容感到困惑: 下面的代码片段(通过snmp)查询多个设备并返回一个字典,它工作正常,但受到Python 3.x 从期货到异步,python-3.x,python-3.4,python-asyncio,Python 3.x,Python 3.4,Python Asyncio,我对如何使用asyncio处理以下内容感到困惑: 下面的代码片段(通过snmp)查询多个设备并返回一个字典,它工作正常,但受到multiprocessing.cpu\u count() 因此,我想通过如下更改迁移到asyncio方法: @asyncio.coroutine def do_polling(netelement, snmp_comm): msg = {} msg['bgp'] = yield from do_lookup_bgp(netelement, sn
multiprocessing.cpu\u count()
因此,我想通过如下更改迁移到asyncio
方法:
@asyncio.coroutine
def do_polling(netelement, snmp_comm):
msg = {}
msg['bgp'] = yield from do_lookup_bgp(netelement, snmp_comm)
msg['iface'] = yield from do_lookup_iface(netelement, snmp_comm)
msg['ifidx'] = yield from do_lookup_ifindex(netelement, snmp_comm)
msg['agg'] = yield from do_lookup_agg(netelement, snmp_comm)
@asyncio.coroutine
def schedule(INFO):
for k,v in INFO['dev'].items():
asyncio.async(do_polling(k, v))
asyncio.get_event_loop().run_until_complete(schedule)
但我得到了以下错误:
Traceback (most recent call last):
File "/home/app/ip-spotlight/code/ixmac.py", line 60, in <module>
main()
File "/home/app/ip-spotlight/code/ixmac.py", line 16, in main
app.ixmac.initialize.run(INFO)
File "/home/app/ip-spotlight/code/app/ixmac/initialize.py", line 191, in run
asyncio.get_event_loop().run_until_complete(schedule)
File "/usr/lib64/python3.4/asyncio/base_events.py", line 353, in run_until_complete
future = tasks.ensure_future(future, loop=self)
File "/usr/lib64/python3.4/asyncio/tasks.py", line 553, in ensure_future
raise TypeError('A Future, a coroutine or an awaitable is required')
TypeError: A Future, a coroutine or an awaitable is required
回溯(最近一次呼叫最后一次):
文件“/home/app/ip spotlight/code/ixmac.py”,第60行,在
main()
文件“/home/app/ip spotlight/code/ixmac.py”,第16行,主视图
app.ixmac.initialize.run(信息)
文件“/home/app/ip spotlight/code/app/ixmac/initialize.py”,第191行,运行中
asyncio.get_event_loop()。运行_直到完成(计划)
文件“/usr/lib64/python3.4/asyncio/base_events.py”,第353行,在运行中直到完成
未来=任务。确保未来(未来,循环=自身)
文件“/usr/lib64/python3.4/asyncio/tasks.py”,第553行,以供将来使用
raise TypeError('需要一个未来、一个协同程序或一个可等待的')
TypeError:需要一个未来、一个合作计划或一个可等待的计划
你能告诉我我做错了什么吗?你没有把它当作一个合作项目。应将最后一行更改为:
asyncio.get_event_loop().run_until_complete(schedule(the_info_variable))
您没有将其用作协同程序。应将最后一行更改为:
asyncio.get_event_loop().run_until_complete(schedule(the_info_variable))
谢谢:)你介意帮我把
编辑成well@iamsterdami wait(block)before
是什么意思do\u polling
函数返回保存在data[netelement]
中的dict。我看到的情况是,do\u polling
调用do\u lookup\u bgp
,然后调用do\u data\u wrangling
。我希望发生的是:do\u polling
调用do\u lookup\u bgp
,do\u lookup\u iface
,do\u lookup\u ifindex
,do_lookup\u agg
针对每个netelement
然后do_data\u wranging
被称为My bad:)请忽略上面的评论谢谢:)你介意帮我编辑吗well@iamsterdam你所说的“我等待(块)”是什么意思在
之前,do_polling
函数返回保存在data[netelement]
中的dict。我看到的情况是,do\u polling
调用do\u lookup\u bgp
,然后调用do\u data\u wrangling
。我希望发生的是:do\u polling
调用do\u lookup\u bgp
,do\u lookup\iface
,do\u lookup\u iIndex
,do\u lookup\u agg
调用每个netelement
,然后do\u data\u wrangling
调用My bad:)请忽略上面的评论