शुरू में मेरे पास कुछ कोड था जो परिणामों को एक सूची में एकत्रित करता था। जब मैं एक सूची comphrehension उपयोग करने के लिए इस कोड को पुनर्संशोधित, मैं अप्रत्याशित परिणाम हो रही है:asyncio के साथ coroutines के साथ सूची समझ का उपयोग करते समय मुझे अलग-अलग परिणाम क्यों मिल रहे हैं?
$ python3.4 /tmp/test.py
['foo', 'foo', 'foo']
['foo', 'foo', 'foo']
<generator object <listcomp> at 0x104eb1360>
मैं तीसरे huh()
के लिए अलग-अलग परिणाम क्यों मिलता है:
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()))
अगर मैं इस कोड को चलाने मैं इस आउटपुट प्राप्त समारोह?
[वाह, यह पुनरुत्पादित है।] (Http://ideone.com/k2MsG9) मुझे इसकी उम्मीद नहीं थी। कैसे ये? – user2357112