運行協同程序需要事件循環。使用asyncio()
library創建一個:
import asyncio
loop = asyncio.get_event_loop()
loop.run_until_complete(foo())
loop.close()
另見Tasks and Coroutines chapter of the asyncio
documentation。
但是請注意,time.sleep()
是而不是等待對象。它返回None
這樣你就得到一個異常1秒後:
>>> loop.run_until_complete(foo())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.5/asyncio/base_events.py", line 342, in run_until_complete
return future.result()
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.5/asyncio/futures.py", line 274, in result
raise self._exception
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.5/asyncio/tasks.py", line 239, in _step
result = coro.send(value)
File "<stdin>", line 2, in foo
TypeError: object NoneType can't be used in 'await' expression
您應該使用asyncio.sleep()
coroutine代替:
async def foo():
await asyncio.sleep(1)