import asyncio
f = open('filename.txt', 'w')
@asyncio.coroutine
def fun(i):
print(i)
f.write(i)
# f.flush()
def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.as_completed([fun(i) for i in range(3)]))
f.close()
main()
我试图使用python3的新库asyncio
。但是我得到这个错误不知道为什么。任何帮助将不胜感激。
答案 0 :(得分:4)
您遇到的具体错误是因为您尝试将asyncio.as_completed
的返回值传递给run_until_complete
。 run_until_complete
需要Future
或Task
,但as_completed
会返回迭代器。将其替换为asyncio.wait
,返回Future
,程序运行正常。
修改强>
仅供参考,这是使用as_completed
的替代实现:
import asyncio
@asyncio.coroutine
def fun(i):
# async stuff here
print(i)
return i
@asyncio.coroutine
def run():
with open('filename.txt', 'w') as f:
for fut in asyncio.as_completed([fun(i) for i in range(3)]):
i = yield from fut
f.write(str(i))
def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
main()