Почему загрузка файла происходит медленно, когда я использую свой процесс обратного вызова с curl? - PullRequest
0 голосов
/ 07 января 2019

У меня есть этот простой скрипт на python, который загружает файл с помощью curl. Также он рассчитывает пропускную способность. Вот весь сценарий:

import pycurl
import time

next_time = 0

# Callback function invoked when download/upload has progress
def progress(download_t, download_d, upload_t, upload_d):
    global next_time
    if time.time() >= next_time:
        print("Total to download", download_t)
        print("Total downloaded", download_d)
        print("Total to upload", upload_t)
        print("Total uploaded", upload_d)
        download_speed = (download_d / 1000000 * 8) / 10
        print(" download_speed", download_speed)
        next_time = time.time() + 10


c = pycurl.Curl()
c.setopt(c.URL, "https://mysample_domain.com/speed-test/test/1G.dat")
c.setopt(c.NOPROGRESS, False)
c.setopt(c.XFERINFOFUNCTION, progress)
start_time = time.time()
next_time = time.time() + 10
c.perform()
print('after download, duration = ', time.time() - start_time)

Проблема заключается в том, что при использовании процесса обратного вызова загрузка файла занимает 459 секунд. Когда я удалил эти две строки, файл был загружен за 210 секунд. Почему мои вычисления в методе прогрессируют замораживание скорости загрузки?

c.setopt(c.NOPROGRESS, False)
c.setopt(c.XFERINFOFUNCTION, progress)

1 Ответ

0 голосов
/ 07 января 2019

Я профилировал ваш код и пришел к выводу, что функция прогресса не вызывает значительного замедления. Фактически, ваш код тратит только 0,2% от общего времени выполнения в функции прогресса (с некоторыми вызовами 40 КБ во время загрузки 20 с).

Я также запускал загрузку несколько раз и заметил, что иногда загрузка без прогресса, а иногда загрузка с прогрессом занимала значительно больше времени, чем обычно (примерно в 2-3 раза дольше). Это может быть связано с сетевыми проблемами / узкими местами, или некоторыми проблемами с pycurl, но это определенно не вызвано вашей функцией прогресса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...