Ваш код работает на меня.Возможно, это ресурс, который вы пытаетесь получить, который не работает.
Возможно, вы захотите попробовать включить отладку для запросов в соответствии с предложением @brennan и / или добавить распечатки в свойкод для отслеживания происходящего:
>>> import requests
>>> import asyncio
>>>
>>>
>>> async def downloadFile(url, filename):
... print(f"• downloadFile({url}, {filename})")
... r = requests.get(url, stream=True)
... print(f" → r: {r}")
... with open(os.path.join('./files', filename), 'wb+') as f:
... print(f" → f is opened: {f}")
... for chunk in r.iter_content(chunk_size=1024):
... print(f" → chunk is: {chunk}")
... if chunk:
... f.write(chunk)
... # Creating same file name
... # with _done appended to know that file has been downloaded
... with open(os.path.join('./files', filename + '_done'), 'w+') as f:
... print(f" → creating output with _done")
... f.close()
... print(f" → wait 1")
... await asyncio.sleep(1)
...
>>>
>>>
>>> d = asyncio.ensure_future(downloadFile('https://xxx/yyy.jpg', 'test.jpg'))
>>> loop = asyncio.get_event_loop()
>>> loop.run_until_complete(d)
• downloadFile(https://xxx/yyy.jpg, test.jpg)
→ r: <Response [200]>
→ f is opened: <_io.BufferedRandom name='./files/test.jpg'>
→ chunk is: b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\r\t\n\x0b\n\x08\r\x0b\n\x0b\x0e\x0e\r\x0f\x13....'
→ chunk is: ...
...
→ creating output with _done
→ wait 1
, который сделает вашу _done
часть кода бесполезной (вам нужны только распечатки).И даже ожидание в конце (когда это сделано ... это сделано!).
async def downloadFile(url, filename):
r = requests.get(url, stream=True)
with open(os.path.join('./files', filename), 'wb+') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
Хотя, возможно, вы захотите отследить любые возможные проблемы, возникающие при подключении к серверу, и действовать соответствующим образом:
async def downloadFile(url, filename):
try:
r = requests.get(url, stream=True)
r.raise_for_status() # to raise on invalid statuses
with open(os.path.join('./files', filename), 'wb+') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
except requests.RequestException as err:
# do something smart when that exception occurs!
print(f"Exception has occured: {err}")