A.R.M.A. + variable time delta dwnloadrate prediction

Signed-off-by: Fabio Erculiani <lxnay@sabayon.org>
This commit is contained in:
Vincenzo Di Massa
2010-02-22 13:28:39 +01:00
committed by Fabio Erculiani
parent ff13363e4f
commit b2c8f15e64
+19 -1
View File
@@ -105,6 +105,8 @@ class UrlFetcher:
self.__elapsed = 0.0
self.__updatestep = 0.2
self.__starttime = time.time()
self.__last_update_time = self.__starttime
self.__last_downloadedsize = 0
self.__existed_before = False
if os.path.lexists(self.__path_to_save):
self.__existed_before = True
@@ -129,6 +131,7 @@ class UrlFetcher:
self.localfile = open(self.__path_to_save, "ab")
self.localfile.seek(0, os.SEEK_END)
self.__startingposition = int(self.localfile.tell())
self.__last_downloadedsize = self.__startingposition
self.__resumed = True
return
@@ -344,9 +347,24 @@ class UrlFetcher:
def _update_speed(self):
cur_time = time.time()
self.__elapsed = cur_time - self.__starttime
last_elapsed = cur_time - self.__last_update_time
# we have the diff size
x_delta = self.__downloadedsize - self.__startingposition
self.__datatransfer = x_delta / self.__elapsed
x_delta_now = self.__downloadedsize - self.__last_downloadedsize
f = self.__elapsed
if self.__elapsed > 1:
f = 1
self.__datatransfer = 0.5 * self.__datatransfer + \
0.5 * ( \
f * x_delta / self.__elapsed + \
(1-f) * x_delta_now / last_elapsed \
)
self.__last_update_time = cur_time
self.__last_downloadedsize = self.__downloadedsize
if self.__datatransfer < 0:
self.__datatransfer = 0
try: