Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 从期货到异步_Python 3.x_Python 3.4_Python Asyncio - Fatal编程技术网

Python 3.x 从期货到异步

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

我对如何使用asyncio处理以下内容感到困惑:

下面的代码片段(通过snmp)查询多个设备并返回一个字典,它工作正常,但受到
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@iamsterdam
i 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:)请忽略上面的评论