[解決済み] Python 3.7 - asyncio.sleep()とtime.sleep()
2022-01-30 11:42:31
質問
にアクセスすると
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)
はスクリプトの実行をブロックしていません。
お役に立てれば幸いです :)
関連
-
opencvとpillowを用いた顔認証システム(デモあり)
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
PythonはWordの読み書きの変更操作を実装している
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
Python 入出力と高次代入の基礎知識
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み] ある関数をx秒ごとに繰り返し実行するにはどうしたらよいですか?[クローズド]