본문 바로가기

Python

Python: 동기, 비동기 함수 여부에 상관없이 실행하기 # inspect.iscoroutinefunction

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
반응형