70120


非同期について勉強しているのですが、以下のサイトでコードを見つけ、実行して見たのですが、上手く動作しません。  
<https://note.crohaco.net/2019/python-asyncio/#future>

下記のコードを実行するとエラーが出ます。

[code]

    import asyncio
    
    async def sleep_and_print(txt):
        await asyncio.sleep(1)
        print(txt)
    sleep_and_print('hello')
    
[/code]

**エラー**

[code]

    async.py:6: RuntimeWarning: coroutine 'sleep_and_print' was never awaited
      sleep_and_print('hello')
    RuntimeWarning: Enable tracemalloc to get the object allocation traceback
    
[/code]


CC BY-SA 4.0
2020-09-04T02:22:01.590
70119
2020-09-04T16:52:00.443
22565
question
python python3 非同期
asyncioを使った簡単なプログラムでエラーがでる。


参考になさっているページの該当コードが載っているところから少し読みすすめると、以下の記述があります。

> JavaScript では async 文を使って作成した非同期関数はそのまま実行することができましたが、 Python
> のコルーチンはそのまま関数として実行しても処理されません。コルーチンオブジェクトが生成されて終わりです。
>
> これはコルーチンの実態がジェネレータだからというのが理由です。 ジェネレータはイテレーションを進めたときに初めて
> 最初のyield文まで実行されますよね。
>
> お察しの通り、このコルーチンを実行してくれる(イテレーションを進めてくれる)のがイベントループということになります。  
>  IOの待ち時間には他の処理を割り当てるなどの裏方もやってくれる偉い子です。

実行するなら下記のようにすると思います。

[code]

    import asyncio
    
    async def sleep_and_print(txt):
        await asyncio.sleep(1)
        print(txt)
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(sleep_and_print('hello'))
    
[/code]

また下記記事も参考になると思います

[Python3 の async/awaitを理解する -
Qiita](https://qiita.com/maueki/items/8f1e190681682ea11c98)


CC BY-SA 4.0
2020-09-04T02:48:53.543
70120
2020-09-04T16:52:00.443
2020-09-04T16:52:00.443
3060
9008
70119
answer