728x90
반응형
함수를 인자로 받아서, 해당 함수가 동기, 비동기 중 어떤 방식으로 선언되어 있는지는 먼저 판단하고,
거기에 맞게 함수를 실행하면 된다.
파이썬 내장 라이브러리인 inspect 내의 iscoroutinefunction 함수를 이용
함수명 대로, coroutine 여부를 판단해준다
async가 붙은 함수: is coroutine function? yes -> inspect.iscoroutinefunction(func): True
async 붙지 않은 함수: is coroutine function? no -> inspect.iscoroutinefunction(func): False
예제 코드
import inspect
import asyncio
def is_async_function(func):
return inspect.iscoroutinefunction(func)
async def execute_function(func, *args, **kwargs):
if is_async_function(func):
return await func(*args, **kwargs)
else:
return func(*args, **kwargs)
# Example usage:
async def async_function_example(a, b):
await asyncio.sleep(1)
return a + b
def sync_function_example(a, b):
return a * b
# To execute both functions without error:
async def main():
result1 = await execute_function(async_function_example, 2, 3)
print(f"Result of async_function_example: {result1}")
result2 = execute_function(sync_function_example, 2, 3)
print(f"Result of sync_function_example: {result2}")
# Run the main function
asyncio.run(main())
728x90
반응형
'Python' 카테고리의 다른 글
Pydantic: Settings with BaseSettings # .env (0) | 2024.06.21 |
---|---|
Python: name mangling 된 메소드 오버라이딩 # __method # (0) | 2024.05.28 |
aiohttp: async requests code example (0) | 2024.05.13 |
FastAPI + Pydantic: 데이터 검증 ORM-DTO # model_validate # from_attributes (1) | 2024.04.22 |
Python: None and False / False and None / None or False # bool (0) | 2024.04.20 |