Coverage for /Users/fmorton/GitHub/BirdBrain-Python-Library-2/src/birdbrain_tasks.py: 100%
30 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-12 11:24 -0400
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-12 11:24 -0400
1import asyncio
3class BirdbrainTasks:
4 def __init__(self):
5 self.method_list = []
6 self.task_list = []
7 self.results = {}
9 def result(self, method_name):
10 #return self.results[method_name]
11 return self.results[method_name] if method_name in self.results else None
13 def create_task(self, method):
14 self.method_list.append(method)
16 def run(self):
17 asyncio.run(self.runner())
19 async def wait(self):
20 while True:
21 running_task_count = 0
23 for task in self.task_list:
24 try:
25 self.results[task.get_coro().__name__] = task.result()
26 except asyncio.exceptions.InvalidStateError:
27 pass
29 if not task.done(): running_task_count += 1
31 if running_task_count == 0: break
33 await self.yield_task()
35 async def runner(self):
36 for method_name in self.method_list:
37 self.task_list.append(asyncio.create_task(method_name))
39 await self.wait()
41 @classmethod
42 async def yield_task(self, yield_time = 0.0):
43 await asyncio.sleep(yield_time)