본문 바로가기

카테고리 없음

파이썬 함수 두 개 동시 실행하기: 실전 활용과 팁

by MSMASTER 2025. 2. 15.
 
 
반응형

요즘 소프트웨어 개발에서는 성능과 효율성이 중요합니다. 특히 파이썬과 같은 인터프리터 언어를 사용할 때는 함수의 동시 실행이 큰 장점이 될 수 있습니다. 이 블로그에서는 파이썬에서 두 개의 함수를 **동시 실행**할 수 있는 방법과 그 활용 사례를 알아보겠습니다. 주제를 심도 있게 다루며, 필요한 통계 자료와 코드 예제를 포함해 **실무적으로 참고할 수 있는 팁**을 제공할 것입니다.

1. 파이썬에서의 동시 실행 이해하기

함수를 동시 실행하는 방식은 여러 가지가 있습니다. 여기서는 주로 스레드와 프로세스를 이용한 방법에 대해 설명할 것입니다. **멀티스레딩**과 **멀티프로세싱**은 각기 다른 장점과 단점을 가지고 있습니다. 예를 들어, CPU가 많은 작업을 수행하는 경우 멀티프로세싱이 더 나은 성능을 보여줄 수 있습니다.

멀티스레딩은 여러 스레드가 같은 프로세스의 메모리 공간을 공유하므로, 메모리 사용이 효율적입니다. 하지만, **GIL(전역 인터프리터 락)**이라는 제한 때문에 CPU 바운드 작업에서 성능이 저하될 수 있습니다. 반면, 멀티프로세싱은 각 프로세스가 독립된 메모리 공간을 가지기 때문에 GIL의 영향을 받지 않지만, 더 많은 메모리를 소모합니다.

2. 스레드를 이용한 두 개의 함수 동시 실행

스레드를 이용한 함수를 동시 실행하는 방법은 비교적 간단합니다. `threading` 모듈을 이용하여 구현할 수 있습니다. 아래 코드는 두 개의 함수를 스레드를 사용하여 동시에 실행하는 예제입니다.

import threading
import time

def function_one():
    for i in range(5):
        print("Function One - Count:", i)
        time.sleep(1)

def function_two():
    for i in range(5):
        print("Function Two - Count:", i)
        time.sleep(1)

thread_one = threading.Thread(target=function_one)
thread_two = threading.Thread(target=function_two)

thread_one.start()
thread_two.start()

thread_one.join()
thread_two.join()

위의 코드를 실행하면, 두 함수가 동시에 실행됩니다. 각 함수는 **1초** 간격으로 자신만의 카운트를 출력합니다. 이처럼 멀티스레딩을 통해 두 개의 작업을 동시에 수행할 수 있습니다.

3. 멀티프로세싱을 통한 동시 실행

CPU 바운드 작업을 처리해야 할 때는 **멀티프로세싱**이 더 적합합니다. `multiprocessing` 모듈을 사용하면 다음과 같이 두 개의 함수를 동시에 실행할 수 있습니다.

from multiprocessing import Process
import time

def function_one():
    for i in range(5):
        print("Function One - Count:", i)
        time.sleep(1)

def function_two():
    for i in range(5):
        print("Function Two - Count:", i)
        time.sleep(1)

if __name__ == "__main__":
    process_one = Process(target=function_one)
    process_two = Process(target=function_two)

    process_one.start()
    process_two.start()

    process_one.join()
    process_two.join()

이 코드 역시 두 함수가 동시에 실행되어 메인 프로세스와는 독립적으로 동작합니다. **CPU 바운드 작업**에서 더 높은 성능을 기대할 수 있습니다.

4. AsyncIO를 통한 비동기 실행

최근에는 비동기 프로그래밍도 주목받고 있습니다. `asyncio` 모듈을 사용하면 비동기 호출을 통해 더욱 효율적으로 함수를 실행할 수 있습니다. 아래는 `asyncio`를 활용한 예제입니다.

import asyncio

async def function_one():
    for i in range(5):
        print(f"Function One - Count: {i}")
        await asyncio.sleep(1)

async def function_two():
    for i in range(5):
        print(f"Function Two - Count: {i}")
        await asyncio.sleep(1)

async def main():
    await asyncio.gather(function_one(), function_two())

asyncio.run(main())

비동기 방식의 장점은 **I/O 연산**이 포함된 작업에서 성능이 크게 개선될 수 있다는 점입니다. 이 예제에서 두 함수는 동일한 시간에 비동기적으로 실행됩니다.

5. 동시 실행 시 유의사항

함수를 동시 실행할 때 몇 가지 주의해야 할 점이 있습니다. 첫째, **상태 공유**에 주의해야 합니다. 멀티스레딩의 경우, 여러 스레드가 같은 변수를 공유할 때 데이터 무결성을 보장하기 위해 락을 사용해야 합니다.

둘째, 예외 처리가 중요합니다. 멀티프로세싱 또는 멀티스레딩 중 어떤 함수에서 예외가 발생할 경우, 메인 프로세스나 스레드가 종료될 수 있습니다. 따라서 각 함수를 try-except로 감싸 예외 처리를 하는 것이 좋습니다.

결론


파이썬에서 두 개의 함수를 동시 실행하는 방법에는 여러 가지가 있습니다. 상황에 따라 스레드, 프로세스 또는 비동기 방식 중 적절한 방법을 선택하여 활용할 수 있습니다. 이러한 기법을 통해 성능을 최적화하고, **더 나은 코드**를 작성하는 데 도움이 되길 바랍니다.

여러분도 주어진 환경과 요구 사항에 맞추어 적절한 동시 실행 방법을 선택하여, 효율적인 파이썬 코드를 작성해보세요!

마지막으로, 이 글이 유익했다면 **소셜 미디어**에서 공유해 주세요. 다른 독자들도 이 정보를 활용할 수 있도록 도움이 될 것입니다. 감사합니다!

반응형