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

1import asyncio 

2 

3class BirdbrainTasks: 

4 def __init__(self): 

5 self.method_list = [] 

6 self.task_list = [] 

7 self.results = {} 

8 

9 def result(self, method_name): 

10 return self.results[method_name] if method_name in self.results else None 

11 

12 def create_task(self, method): 

13 self.method_list.append(method) 

14 

15 def run(self): 

16 asyncio.run(self.runner()) 

17 

18 async def wait(self): 

19 while True: 

20 running_task_count = 0 

21 

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 

27 

28 if not task.done(): running_task_count += 1 

29 

30 if running_task_count == 0: break 

31 

32 await self.yield_task() 

33 

34 async def runner(self): 

35 for method_name in self.method_list: 

36 self.task_list.append(asyncio.create_task(method_name)) 

37 

38 await self.wait() 

39 

40 @classmethod 

41 async def yield_task(self, yield_time = 0.0): 

42 await asyncio.sleep(yield_time)