У меня есть пример кода:
import asyncio
import time
async def asyncsleep(number):
time.sleep(number)
async def do_one():
await asyncsleep(1)
print("one 1")
await asyncsleep(1)
print("one 2")
await asyncsleep(1)
print("one 3")
async def do_two():
await asyncsleep(1)
print("two 1")
await asyncsleep(1)
print("two 2")
await asyncsleep(1)
print("two 3")
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait([
do_one(),
do_two()
]))
loop.close()
Ожидается, что в этом коде две функции будут работать параллельно.Я имею в виду, что выход обоих должен прийти одновременно.Но этого не происходит.Причина в том, что я сам реализовал функцию сна asyncsleep
.Если я использую asyncio.sleep
вместо него, все работает нормально.
import asyncio
import time
async def asyncsleep(number):
time.sleep(number)
async def do_one():
await asyncio.sleep(1)
print("one 1")
await asyncio.sleep(1)
print("one 2")
await asyncio.sleep(1)
print("one 3")
async def do_two():
await asyncio.sleep(1)
print("two 1")
await asyncio.sleep(1)
print("two 2")
await asyncio.sleep(1)
print("two 3")
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait([
do_one(),
do_two()
]))
loop.close()
Я также посмотрел подпись функции asyncio.sleep
:
@coroutine
def sleep(delay, result=None, *, loop=None):
"""Coroutine that completes after a given time (in seconds)."""
if delay == 0:
yield
return result
if loop is None:
loop = events.get_event_loop()
future = loop.create_future()
h = future._loop.call_later(delay,
futures._set_result_unless_cancelled,
future, result)
try:
return (yield from future)
finally:
h.cancel()
Что за asyncio.sleep
функция имеет, что моя реализованная asyncsleep
функция не имеет?Они оба сопрограммы. Почему они ведут себя по-разному?