2016-02-15 4 views
0

У меня есть некоторый код для загрузки содержимого:программы задержки до завершения загрузки

def downloadupdate(): 

    url = 'http://myurl.com/o/test/Super.zip' 
    destination = xbmc.translatePath('somepath.zip') 
    urllib.urlretrieve(url,destination) 
    time.sleep(40) 

Есть ли способ в Python, чтобы задержать скрипт работает, пока загрузка завершена? Как вы можете видеть, я сейчас использую time.sleep(x), чтобы выполнить это сейчас, и в этом я догадываюсь, сколько времени это займет. Я бы предпочел, чтобы сценарий продолжался после завершения загрузки, если это возможно.

ответ

1

Вы можете сделать это так, чтобы urllib был синхронным, то есть он блокировал бы остальную часть программы, пока загрузка не закончится.

import urllib 
zip = urllib.urlopen('http://myurl.com/o/test/Super.zip') 
with open(xbmc.translatePath('somepath.zip'), "wb") as zipFile: 
    zipFile.write(zip.read()) 
# Download has Completed 
print "Downloaded" 
+0

Обратите внимание, что [запросы] (http://docs.python-requests.org/en/latest/index.html) - это более удобный модуль для создания подобных вещей. Кроме того, этот метод загрузит весь файл в память (что-то примечание, если этот zip-файл очень большой). –

0

Насколько я могу судить, urllib.urlretrieve() не асинхронный, в первую очередь, так что вам не нужно делать какие-либо time.sleep() или подобный, чтобы сделать блок сценария до поиска не будет завершен.

Смежные вопросы