여기에 버전의 파일을 다운로드 bytearray
에서 별도의 thread.
에서 언급했듯이 다른 답변과 의견이 다른 alternativs 개발된 비동기업에서는 마음을 읽지 않으로 너무 많이 이동하기로 결정과 threading
,그것은 단지 입증하는 개념(고 있기 때문에 편의,함께 제공하기 때문 python).
에서 아래 코드는 경우는 파일의 크기로 알려져 있고,각 .
것에 해당하는 1%. 보너스로,다운로드 총 바이트 수를 인쇄 할 수 있의 시작에서 다음과 같은 줄을 (1234 B / 1234567 B)
. 면 크기로 알려져 있지 않고,대체 솔루션은 각각의 .
을 나타내 덩어리.
import requests
import threading
def download_file(url: str):
headers = {"<some_key>": "<some_value>"}
data = bytearray()
with requests.get(url, headers=headers, stream=True) as request:
if file_size := request.headers.get("Content-Length"):
file_size = int(file_size)
else:
file_size = None
received = 0
for chunk in request.iter_content(chunk_size=2**15):
received += len(chunk)
data += chunk
try:
num_dots = int(received * 100 / file_size)
print(
f"({received} B/{file_size} B) "
+ "." * num_dots, end="\r"
)
except TypeError:
print(".", end="")
print("\nDone!")
url = "<some_url>"
thread = threading.Thread(target=download_file, args=(url,))
thread.start()
# Do something in the meantime
thread.join()
는 것을 명심하십시요 나는 왼쪽으로 잠금을 보호에 대하여 동시에 액세스 stdout
하는 소음을 줄일 수 있습니다. 나도 왼쪽으로 쓰 bytarray
하는 파일의 끝에서(또는 쓰기 덩어리를 파일로 그들은받은 파일이 큰 경우),그러나 유지 하는 마음에 사용할 수 있는 잠금에 대한뿐만 아니라 당신이 읽고 쓰기 같은 파일에 어떤 다른 부분의 스크립트입니다.