ppbbww

Pillar Point boats, birds, and waves watcher
git clone git@abtrout.com:ppbbww.git
Log | Files | Refs | README | LICENSE

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))