Ограничение полосы пропускания при использовании процесса python при загрузке данных - PullRequest
0 голосов
/ 06 марта 2020

Я создал python клиент, который создает несколько сокетов для загрузки / выгрузки файлов с сервера. Я неоднократно замечал, что при загрузке слишком большого количества данных мой маршрутизатор перезагружался, и мой inte rnet был отключен в течение приблизительно 3 минут. Я читал, что это происходит, когда предел пропускной способности превышен. Как я могу установить ограничение пропускной способности для всех открытых сокетов в то время?

Я мог бы найти это: https://pypi.org/project/aiothrottle/ Но при использовании этого модуля я больше не могу использовать свой модуль сокетов и нужно использовать aiohttp, что должно означать для меня воссоздание моего дырочного python клиента.

# simplified version of my code #

import socket
ip = "1.1.1.1"
port = 8080

def start():
        mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            mysocket.connect((ip, port))
            mysocket.send(str.encode("GET " + "Data" + "HTTP/1.1 \r\n"))
            mysocket.sendto(str.encode("GET " + "Data" + "HTTP/1.1 \r\n"), (ip, port))
        except socket.error:
            print("e")
        mysocket.close()


while i in range(4): # here I am creating multiple sockets to upload/download data from different hosts
    t = Thread(target=start)
    t.start()

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

1 Ответ

0 голосов
/ 06 марта 2020

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

interval = 1.0 #seconds
max_bandwidth = 50 * 1024 #kilobytes * 1024

Затем используйте socket.recv для загрузки кусков в l oop и создайте временная управляющая переменная для измерения количества потоков данных, загруженных за интервал. Если количество загруженных данных превышает интервал max_bandwidth *, тогда для неактивного значения интервала ожидания. Подобный метод используют для отправки.

...