2015-09-27 72 views

回答

56

運行協同程序需要事件循環。使用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)