【问题标题】:Limiting bandwith usage of a python process while downloading data下载数据时限制python进程的带宽使用
【发布时间】:2020-03-07 00:23:36
【问题描述】:

我创建了一个 python 客户端,它创建多个套接字来从服务器上传/下载文件。 我多次注意到,当一次下载太多数据时,我的路由器重新启动并且我的互联网离线大约 3 分钟。我已经读过,当超出带宽限制时会发生这种情况。如何为当时打开的所有套接字设置带宽限制?

我可以找到这个:https://pypi.org/project/aiothrottle/ 但是当使用这个模块时,我不能再使用我的 sockets 模块,需要使用 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()

如何更改代码以使包含套接字的线程都不会超过带宽限制?

【问题讨论】:

    标签: python networking bandwidth


    【解决方案1】:

    我认为您可以设置传输的最大速度和间隔以检查此时线程下载了多少字节。

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

    然后使用socket.recv循环下载块并创建临时控制变量来测量间隔下载了多少数据线程。如果下载的数据量大于 max_bandwidth * 间隔,则休眠线程获取间隔值。类似的方法用于发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      相关资源
      最近更新 更多