ユーザ用ツール

サイト用ツール


サイドバー



最近の更新



Tag Cloud

タグ数量
9
10
1
3
1
2
17
7
1
1
4
13
4
1
2
314
1
9
2
7
21
5
1
31
3
3
1
6
1
1
46
1
3
3
1
1
1
1
1
1
33
46
7
9
10
8
10
3
21
2
9
2
2
6
9
1
1
6
12
4
3
3
2
1
8
2
4
1
6
30
2
12
5
3
1
1
2
3
2
1
3
4
3
3
4
2
2
1
1
2
1
2
1
2
1
27
2
1
3
2
2
1
1
2
3
17
5
9
1
1
2
17
2
6
1
2
12
1
3
1
1
4
11
1
6
4
2
7
1
3
3
13
1
4
1
1
10
3
1
17
3
1
5
1
2
1
1
2
9
2
2
3
2
1
3
1
3
1
2
2
2
1
2
6
1
4
3
5
1
3
1
3
3
2
1
1
30
1
3
3
1
1
1
5
5
1
36
2
4
2
1
2
2
3
1
1
1
4
1
2
1
3
1
1
1
2
5
2
5
2
1
1
1
5
3
2
4
6
1
2
2
27
1
1
3
4
1
1
2
1
1
2
1
1
1
1
2
1
1
1
1
1
20
7
1
6
1
1
3
1
2
2
1
2
1
1
1
1
1
1
2
1
1
2
1
1
1
1
1
1
1
5
2
1
1
2
2
2
1
1
2
1
1
12
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
2
15_python:13_python_async

13 Python 非同期処理 asyncio

1.非同期処理でURL取得

asyncioでURLにアクセスし結果を取得、戻り値として受け取る。

ここで戻り地を受け取る。
戻り値の順番は、gatherの順番どおりに戻ってくる

results = loop.run_until_complete(gather)

get_url.py

import asyncio
import time
import functools
import requests


def sleep(sec):
    time.sleep(sec)
    return sec


async def get_global_ip():
    loop = asyncio.get_event_loop()
    resp = await loop.run_in_executor(None, requests.get, 'http://fl8.jp')
    print('get_ip')
    return resp.text


async def parallel_sleep(seconds):
    loop = asyncio.get_event_loop()
    resp = await loop.run_in_executor(None, sleep, seconds)
    print(f'sleep {resp}sec')
    return resp


def main():
    loop = asyncio.get_event_loop()
    gather = asyncio.gather(
        parallel_sleep(10),
        get_global_ip(),
        parallel_sleep(1)
    )
    results = loop.run_until_complete(gather)
    print(results)


if __name__ == '__main__':
    main()

実行結果

$ python3.6 test2.ppy 
get url
sleep 1sec
sleep 10sec
[10, 'fl8.jp<br>100.100.100.10 ', 1]
15_python/13_python_async.txt · 最終更新: 2022/03/30 14:50 by matsui

Yesterday:1564 Today:030 Total:28753