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

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] 

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

12 

13 def create_task(self, method): 

14 self.method_list.append(method) 

15 

16 def run(self): 

17 asyncio.run(self.runner()) 

18 

19 async def wait(self): 

20 while True: 

21 running_task_count = 0 

22 

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 

28 

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

30 

31 if running_task_count == 0: break 

32 

33 await self.yield_task() 

34 

35 async def runner(self): 

36 for method_name in self.method_list: 

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

38 

39 await self.wait() 

40 

41 @classmethod 

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

43 await asyncio.sleep(yield_time)