下载数据时限制 python 进程的带宽使用
Limiting bandwith usage of a python process while downloading data
我已经创建了一个 python 客户端,它为来自服务器的 upload/download 文件创建了多个套接字。
我多次注意到,当一次下载过多数据时,我的路由器会重新启动,并且我的互联网会离线约 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()
如何更改代码以使 none 个包含套接字的线程超过带宽限制?
我想你可以设置传输的最大速度和检查线程下载多少字节的时间间隔。
interval = 1.0 #seconds
max_bandwidth = 50 * 1024 #kilobytes * 1024
然后使用socket.recv循环下载块并创建临时控制变量来测量间隔内下载了多少数据线程。如果下载的数据量大于 max_bandwidth * interval 则为 interval 值休眠线程。类似的方法用于发送。
我已经创建了一个 python 客户端,它为来自服务器的 upload/download 文件创建了多个套接字。 我多次注意到,当一次下载过多数据时,我的路由器会重新启动,并且我的互联网会离线约 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()
如何更改代码以使 none 个包含套接字的线程超过带宽限制?
我想你可以设置传输的最大速度和检查线程下载多少字节的时间间隔。
interval = 1.0 #seconds
max_bandwidth = 50 * 1024 #kilobytes * 1024
然后使用socket.recv循环下载块并创建临时控制变量来测量间隔内下载了多少数据线程。如果下载的数据量大于 max_bandwidth * interval 则为 interval 值休眠线程。类似的方法用于发送。