### 非同期処理とは?
あるタスクが終了するのを待っている間、別のタスクを実行すること
$ pip3 install aiohttp
import datetime
import aiohttp
import asyncio
start = datetime.datetime.now()
def log(message):
print(f'{(datetime.datetime.now() - start).seconds}秒経過', message)
async def fetch(session, url):
""" 非同期にURLからデータを取得 """
print(f"Fetching {url}")
async with session.get(url) as response:
return await response.text()
async def main():
log("タスク開始")
urls = [
"http://google.com",
"http://qiita.com",
"https://www.python.org/",
"https://www.mozilla.org/en-US/",
"https://html.spec.whatwg.org/multipage/",
"https://www.w3.org/TR/css/",
"https://ecma-international.org/",
"https://www.typescriptlang.org/",
"https://www.oracle.com/jp/java/technologies/",
"https://www.ruby-lang.org/ja/",
"https://www.postgresql.org/",
"https://www.mysql.com/jp/",
"https://docs.djangoproject.com/ja/5.0/",
"https://spring.pleiades.io/projects/spring-boot",
"https://rubyonrails.org/"
"https://firebase.google.com/?hl=ja",
"https://go.dev/",
"https://nodejs.org/en"
]
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
print("Starting tasks...")
print("Tasks are running in the background...")
results = await asyncio.gather(*tasks)
for result in results:
print(result[:100])
log("task finished")
if __name__ == "__main__":
asyncio.run(main())