gb28181-docking-platform-proxy/test/main.py
2024-03-15 10:13:31 +08:00

96 lines
2.7 KiB
Python

from concurrent.futures import ThreadPoolExecutor
import os
import os.path as path
import sys
import datetime
import urllib
import urllib.parse
import urllib.request
work_path = sys.path[0]
# 设备列表
devices_file = "devices.txt"
devices_file_path = path.join(work_path, devices_file)
# 下载目录
tmp_dir = "download"
tmp_path = path.join(work_path, tmp_dir)
server = "http://127.0.0.1:18183/video"
# server = "http://httpbin.org/anything/video"
def check_or_mk_tmp_dir():
if not path.exists(tmp_path):
os.mkdir(tmp_path)
def check_or_create_devices_file():
if not path.exists(devices_file_path):
with open(devices_file_path, mode="w", encoding="utf8") as f:
f.write("# 设备编码 一行一个\n")
def read_devices_file():
check_or_create_devices_file()
devices = []
with open(devices_file_path, mode="r", encoding="utf8") as f:
while True:
line = f.readline()
if not line:
break
line = line.strip()
if line.startswith("#") or len(line) == 0:
continue
else:
devices.append(line)
print(f"读取设备数量: {len(devices)}")
return devices
def tasks(device: str, start_time: str, end_time: str):
params = {
"start_time": start_time,
"end_time": end_time,
"device_id": device,
"useDownload": True,
}
url_params = urllib.parse.urlencode(params)
url = urllib.parse.urljoin(server, f"?{url_params}")
start = datetime.datetime.now()
start_str = start.strftime("%Y-%m-%d %H:%M:%S.%f")
print(f"{start_str} 开始下载: {url}")
urllib.request.urlretrieve(url,
f"{tmp_path}/{device}_{start_time}_{end_time}.mp4")
end = datetime.datetime.now()
print(
f"{device} {start_time}-{end_time}: 下载用时: {(end - start).total_seconds()}")
if __name__ == '__main__':
check_or_mk_tmp_dir()
check_or_create_devices_file()
print(work_path)
# workers = os.cpu_count()
workers = 32
print(f"最大并发数: {workers}")
with ThreadPoolExecutor(max_workers=workers) as worker:
devices = read_devices_file()
# day = datetime.datetime.today()
day = datetime.date(year=2024, month=3, day=11)
# 开始时间
start = datetime.time(hour=8, minute=11, second=15)
# 结束时间
end = datetime.time(hour=8, minute=11, second=30)
start_time = datetime.datetime.combine(day, start).strftime(
"%Y%m%d%H%M%S")
end_time = datetime.datetime.combine(day, end).strftime("%Y%m%d%H%M%S")
for device in devices:
worker.submit(tasks, device, start_time, end_time)