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-21 08:37 -0400
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-21 08:37 -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] if method_name in self.results else None
12 def create_task(self, method):
13 self.method_list.append(method)
15 def run(self):
16 asyncio.run(self.runner())
18 async def wait(self):
19 while True:
20 running_task_count = 0
22 for task in self.task_list:
23 try:
24 self.results[task.get_coro().__name__] = task.result()
25 except asyncio.exceptions.InvalidStateError:
26 pass
28 if not task.done(): running_task_count += 1
30 if running_task_count == 0: break
32 await self.yield_task()
34 async def runner(self):
35 for method_name in self.method_list:
36 self.task_list.append(asyncio.create_task(method_name))
38 await self.wait()
40 @classmethod
41 async def yield_task(self, yield_time = 0.0):
42 await asyncio.sleep(yield_time)