多望远镜天体测光软件多线程HTTP图像数据传输过慢求助
多望远镜HTTP数据传输性能瓶颈问题
我正在开发多望远镜天体测光软件,搭建了一台可通过HTTP协议控制多台望远镜的母机。为实现同步操作,尝试使用多线程同时控制10台望远镜,但从10台望远镜获取图像数据时(单台110MB,总计约1.2GB),数据传输速度远低于预期。
网络配置:母机10G连接,每台望远镜1G连接,预期10台同时传输时速度约9Gbps,实际仅达到1.5Gbps。
为定位问题,提取代码片段测试耗时:
import requests import time from astropy.time import Time from threading import Thread def request_imagearray(cam): client_trans_id = 1 client_id = 1 attribute = 'imagearray' url = f"{cam.device.base_url}/{attribute}" hdrs = {'accept' : 'application/imagebytes'} # Make Host: header safe for IPv6 if(cam.device.address.startswith('[') and cam.device.address.startswith('[::1]')): hdrs['Host'] = f'{cam.device.address.split("%")[0]}]' pdata = { "ClientTransactionID": f"{client_trans_id}", "ClientID": f"{client_id}" } print('START:',Time.now(), cam.device.address) start = time.time() response = requests.request("GET","%s/%s" % (cam.device.base_url, attribute), params=pdata, headers=hdrs, verify = False) print('consumed time:', time.time() - start, cam.device.address) unitnumlist = [1,2,3,5,6,7,8,9,10,11] camlist = [] for unitnum in unitnumlist: #camlist.append(mainCamera(unitnum)) Thread(target = request_imagearray, kwargs = dict(cam = mainCamera(unitnum))).start()
输出结果如下:
START: 2024-04-15 07:49:59.067946 10.0.106.6:11111 START: 2024-04-15 07:49:59.382973 10.0.106.7:11112 START: 2024-04-15 07:49:59.541495 10.0.106.8:11113 START: 2024-04-15 07:49:59.647055 10.0.106.10:11111 START: 2024-04-15 07:49:59.788433 10.0.106.11:11111 START: 2024-04-15 07:49:59.897876 10.0.106.12:11111 START: 2024-04-15 07:50:00.009254 10.0.106.13:11111 START: 2024-04-15 07:50:00.157893 10.0.106.14:11111 START: 2024-04-15 07:50:00.347704 10.0.106.16:11111 START: 2024-04-15 07:50:00.544626 10.0.106.9:11111 consumed time: 5.96204686164856 10.0.106.6:11111 consumed time: 7.304373502731323 10.0.106.7:11112 consumed time: 7.58618688583374 10.0.106.8:11113 consumed time: 7.617574453353882 10.0.106.10:11111 consumed time: 7.678117990493774 10.0.106.11:11111 consumed time: 7.76300311088562 10.0.106.12:11111 consumed time: 7.636215925216675 10.0.106.14:11111 consumed time: 7.785021066665649 10.0.106.13:11111 consumed time: 7.338518857955933 10.0.106.9:11111 consumed time: 11.309057235717773 10.0.106.16:11111
实际耗时远超预期的约3秒,虽多线程同时发起request.get请求,但数据并未实现同时传输。
内容的提问来源于stack exchange,提问作者Hyeonho Choi
相关产品推荐
相关产品推荐

