私はasyncio.create_task()
を試みていますが、このエラーを扱っています:
以下に例を示します。
_import asyncio
import time
async def async_say(delay, msg):
await asyncio.sleep(delay)
print(msg)
async def main():
task1 = asyncio.create_task(async_say(4, 'hello'))
task2 = asyncio.create_task(async_say(6, 'world'))
print(f"started at {time.strftime('%X')}")
await task1
await task2
print(f"finished at {time.strftime('%X')}")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
_
でる:
_AttributeError: module 'asyncio' has no attribute 'create_task'
_
そこで、代わりに次のコードスニペット(.ensure_future()
)を問題なく試しました。
_async def main():
task1 = asyncio.ensure_future(async_say(4, 'hello'))
task2 = asyncio.ensure_future(async_say(6, 'world'))
print(f"started at {time.strftime('%X')}")
await task1
await task2
print(f"finished at {time.strftime('%X')}")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
_
でる:
_started at 13:19:44
hello
world
finished at 13:19:50
_
[[〜#〜] note [〜#〜]]:
[更新]:
から借りて @ ser4815162342 回答 、私の問題は解決しました:
_async def main():
loop = asyncio.get_event_loop()
task1 = loop.create_task(async_say(4, 'hello'))
task2 = loop.create_task(async_say(6, 'world'))
print(f"started at {time.strftime('%X')}")
await task1
await task2
print(f"finished at {time.strftime('%X')}")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
_
create_task
トップレベル関数がPython 3.7で追加され、あなたはPython 3.6。3.7より前のcreate_task
は、イベントループで method としてのみ使用可能であったため、次のように呼び出すことができます。
async def main():
loop = asyncio.get_event_loop()
task1 = loop.create_task(async_say(4, 'hello'))
task2 = loop.create_task(async_say(6, 'world'))
これは、3.6と3.7の両方、および以前のバージョンで機能します。 asyncio.ensure_future
も機能しますが、コルーチンを扱っていることがわかっている場合は、create_task
はより明示的で、 preferred オプションです。