sample_streams.py (1185B)
1 import argparse 2 import asyncio 3 import logging 4 import random 5 6 from .stream_sampler import StreamSampler 7 8 9 async def sample_stream(cam_name, data_dir): 10 ss = StreamSampler(cam_name, data_dir) 11 while True: 12 try: 13 frames = await ss.get_recent_frames() 14 except Exception as ex: 15 logging.error(f"cam_name={cam_name} Failed to get_recent_frames: {ex}") 16 # TODO: Decrease delay but only keep 1 frame? 17 delay = random.randint(5, 20) # seconds! 18 await asyncio.sleep(delay) 19 20 21 async def main_task(cams, data_dir): 22 async with asyncio.TaskGroup() as tg: 23 for cam in cams: 24 tg.create_task(sample_stream(cam, data_dir)) 25 26 27 def main(): 28 parser = argparse.ArgumentParser() 29 parser.add_argument( 30 "-c", 31 "--cams", 32 nargs="+", 33 action="extend", 34 help="Surfline cam(s) to crawl", 35 required=True, 36 ) 37 parser.add_argument( 38 "-d", "--dir", default="data", help="Directory to store extracted frames" 39 ) 40 args = parser.parse_args() 41 42 logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s") 43 asyncio.run(main_task(args.cams, args.dir))