İlk olarak, sonuçların bir araya getirildiği bazı kodlar vardı. Bir liste comphrehension kullanmak için bu kodu refactored, ben beklenmeyen sonuçlar alıyorum:Asyncio'lu koroutinler ile liste anlaşılırken neden farklı sonuçlar elde ediyorum?
$ python3.4 /tmp/test.py
['foo', 'foo', 'foo']
['foo', 'foo', 'foo']
<generator object <listcomp> at 0x104eb1360>
Neden üçüncü huh()
için farklı sonuçlar alabilirim: Bu kodu çalıştırırsanız
import asyncio
@asyncio.coroutine
def coro():
return "foo"
# Writing the code without a list comp works,
# even with an asyncio.sleep(0.1).
@asyncio.coroutine
def good():
yield from asyncio.sleep(0.1)
result = []
for i in range(3):
current = yield from coro()
result.append(current)
return result
# Using a list comp without an async.sleep(0.1)
# works.
@asyncio.coroutine
def still_good():
return [(yield from coro()) for i in range(3)]
# Using a list comp along with an asyncio.sleep(0.1)
# does _not_ work.
@asyncio.coroutine
def huh():
yield from asyncio.sleep(0.1)
return [(yield from coro()) for i in range(3)]
loop = asyncio.get_event_loop()
print(loop.run_until_complete(good()))
print(loop.run_until_complete(still_good()))
print(loop.run_until_complete(huh()))
Bu çıktıyı almak işlev?
[Whoa, tekrarlanabilir.] (Http://ideone.com/k2MsG9) Bunu beklemiyordum. Nasıl olur? – user2357112