概要
そうしないと ConnectionError や Too many open files になり途中で必ず終了してしまいます
環境
- macOS 13.4.1
- Python 3.11.3
サンプルコード
今回は Session を使っています
Session を使う場合は必ずスレッド作成時に Session も作成する必要があります
ポイントは response を必ず閉じるような処理にしている点です
import threading
import requests
class Downloader(threading.Thread):
def __init__(self, url: str, filename: str):
super().__init__()
self.url = url
self.filename = filename
def run(self):
response = None
try:
print(f"Target file url: {self.url}")
with requests.Session() as session:
response = session.get(self.url)
if response.status_code == 200:
download_path = f"./imgs/{self.filename}"
with open(download_path, "wb") as file:
file.write(response.content)
print(f"\033[0;32mDonload complete: {download_path}\033[00m")
except Exception:
if response:
response.close()
if __name__ == "__main__":
threads = []
for filename in ["file1", "file2", "file3"]:
url = f"http://localhost/{filename}"
dl = Downloader(url, filename)
dl.start()
threads.append(dl)
for t in threads:
t.join()
0 件のコメント:
コメントを投稿