asyncio
ページに移動すると、最初の例はhello worldプログラムです。 python 3.73
、通常のものと何も変わらない誰でも私に違いを教えて、重要な例を示すことはできますか?
In [1]: import asyncio
...:
...: async def main():
...: print('Hello ...')
...: await asyncio.sleep(5)
...: print('... World!')
...:
...: # Python 3.7+
...: asyncio.run(main())
Hello ...
... World!
In [2]:
In [2]: import time
...:
...: def main():
...: print('Hello ...')
...: time.sleep(5)
...: print('... World!')
...:
...: # Python 3.7+
...: main()
Hello ...
... World!
時間を意図的に1秒から5秒に増やしています。何か特別なものを見たいと思っていますが、そうではありませんでした。
コードには非同期処理がほとんどないため、特別なことは何もありません。ただし、主な違いは、time.sleep(5)
がブロッキングであり、asyncio.sleep(5)
が非ブロッキングであることです。
time.sleep(5)
が呼び出されると、スクリプトの実行全体がブロックされ、保留され、フリーズされるだけで、何も実行されません。ただし、await asyncio.sleep(5)
を呼び出すと、awaitステートメントの実行が完了するまで、イベントループに何かを実行するように要求します。
以下は改善された例です。
_import asyncio
async def hello():
print('Hello ...')
await asyncio.sleep(5)
print('... World!')
async def main():
await asyncio.gather(hello(), hello())
asyncio.run(main())
_
出力されます:
_~$ python3.7 async.py
Hello ...
Hello ...
... World!
... World!
_
await asyncio.sleep(5)
がスクリプトの実行をブロックしていないことがわかります。
それが役に立てば幸い :)