Есть несколько способов извлечь весь объект publi c функции , я выбрал dir встроенная функция .
Когда у вас есть все функции, вы можете использовать inspect.iscoroutinefunction , чтобы узнать, является ли эта функция coroutine
.
Пожалуйста, учтите следующее class Reports
пример:
class Reports:
def __init__(self, name):
self.name = name
async def __class_private(self):
print('__class_private')
async def _private(self):
print('_private')
async def func1(self, *args, **kwargs):
print('func 1')
async def func2(self, *args, **kwargs):
print('func 2')
def func3(self, *args, **kwargs):
print('func 3')
Следующий код извлечет все функции async
publi c класса.
report = Reports('dealer1')
func_list = [getattr(report, func) for func in dir(report) if callable(getattr(report, func)) and not func.startswith('_')]
Он берет все функции класса и исключает все приватные один раз.
Теперь для второй части, запустив все из них (вы можете сделать это, используя списочное понимание, я хотел показать процесс и результаты ):
for f in func_list:
if inspect.iscoroutinefunction(f):
print(f.__name__)
tasks.append(loop.create_task(f()))
print('Results')
done, pending = await asyncio.wait(tasks)
print(done)
print(pending)
Запуск его приведет к:
func1
func2
Results
func 1
func 2
{<Task finished coro=<Reports.func2() done, defined at C:/stackoverflow/tests:18> result=None>, <Task finished coro=<Reports.func1() done, defined at C:/stackoverflow/tests:15> result=None>}
set()
PS
Он будет работать все класс publi c функции.