Python urllib读取url特定行的速度更快

Python urllib读取url特定行的速度更快,python,urllib,Python,Urllib,我设法访问了robot web服务器,并读取了第166到171行的数据。这种情况每0.08秒(80毫秒)发生一次,请参见代码blow。使用Python版本3.6 print("Begin") import urllib.request import time #! INIT i = 0 d_coordinate = {} while(i < 100): t0 = time.time() response = urllib.request.urlop

我设法访问了robot web服务器,并读取了第166到171行的数据。这种情况每0.08秒(80毫秒)发生一次,请参见代码blow。使用Python版本3.6

print("Begin")

import urllib.request
import time

#! INIT
i = 0
d_coordinate = {}

while(i < 100):
    t0 = time.time()
    response = urllib.request.urlopen("http://192.168.41.110/MD/CURPOS.DG")

    #Loop CURPOS
    for line_number, line in enumerate(response):
        if(line_number >= 166 and line_number <= 171): 
            #Zet de volledig uitgelezen line in array: response_lines
            response_lines = [line]

            #Filteren van data, wegschrijven in dictonary: d_coordinate 
            for line in response_lines:
                key = line.split(b':')[0].decode()
                value = float(line.split(b' ')[-1])
                d_coordinate[key] = value
               
    i = i + 1
    print(d_coordinate)
    t1 = time.time()
    total = t1-t0
    
    print ("Total Cyclic time: ", total)
    print("\n\n")
每次读取整个文件时,这当然要花费大量的时间。是否可以只直接查看第166-171行?

您可以通过以下方式获取所需的行: 添加
导入itertools
然后替换:

for line_number, line in enumerate(response):
    if(line_number >= 166 and line_number <= 171):
请注意,有
172
而不是
171
作为
itertools。islice
约定与python索引切片(即inclusive-exclusive)兼容。

您可以使用以下方式获取所需的行: 添加
导入itertools
然后替换:

for line_number, line in enumerate(response):
    if(line_number >= 166 and line_number <= 171):

请注意,有
172
而不是
171
作为
itertools。islice
约定符合python索引切片,即inclusive-exclusive。

感谢您的回复。您的解决方案运行良好,只有程序仍然达到80毫秒的相同速度。还有其他解决方案吗?我没有任何现成的解决方案。我唯一可以建议的是更细粒度的时间测量。重试响应需要多少时间?循环需要多少时间?如果你对whoule进行注释,速度会有多快?如果主时间消费者正在检索优化lopp,这将没有帮助。如果没有任何代码,只需urllib,代码实际上需要0.08秒。是否有其他方法可以更快地获取数据?线程,多处理..?谢谢你的回复。您的解决方案运行良好,只有程序仍然达到80毫秒的相同速度。还有其他解决方案吗?我没有任何现成的解决方案。我唯一可以建议的是更细粒度的时间测量。重试响应需要多少时间?循环需要多少时间?如果你对whoule进行注释,速度会有多快?如果主时间消费者正在检索优化lopp,这将没有帮助。如果没有任何代码,只需urllib,代码实际上需要0.08秒。是否有其他方法可以更快地获取数据?线程,多处理。。?
for line_number, line in itertools.islice(enumerate(response), 166, 172):