python3 여러개의 함수를 동시에 실행하는 방법이 궁금합니다.

조회수 18622회

오픈 API를 이용해서 requests모듈로 각 함수들을 불러오는데요. 이것을 순차적으로 명령행이 실행되니까 실행속도가 너무 느린 것 같습니다.

예를 들어서 세 개의 함수가 있다고 합시다.

def 함수1(): r = requests.get('http://www.12345.com')

def 함수2(): r = requests.get('http://www.56789.com')

def 함수3(): r = requests.get('http://www.98765.com')

이렇게 세 개의 함수가 있다고 했을 때, 순차적으로 실행되는 것이 아니라 동시에 호출할 수 있는 방법이 어떤 게 있는지 궁금합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

3 답변

  • multiprocessing 모듈을 이용해보세요. 혹시 multiprocessing 개념을 모르신다면 답글을 달아주시기 바랍니다.

    from multiprocessing import Process
    
    
    def func1():
        print("a")
    
    def func2():
        print("b")
    
    def func3():
        print("c")
    
    # 프로세스를 생성합니다
    p1 = Process(target=func1) #함수 1을 위한 프로세스
    p2 = Process(target=func2) #함수 1을 위한 프로세스
    p3 = Process(target=func3) #함수 1을 위한 프로세스
    
    # start로 각 프로세스를 시작합니다. func1이 끝나지 않아도 func2가 실행됩니다.
    p1.start()
    p2.start()
    p3.start()
    
    # join으로 각 프로세스가 종료되길 기다립니다 p1.join()이 끝난 후 p2.join()을 수행합니다
    p1.join()
    p2.join()
    p3.join()
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 친절한 답변 진심으로 감사드립니다. Process(target='')에 들어가는 인자는 함수가 아닌 클래스와 같은 모듈도 들어갈 수 있나요? 그러니까 'multiprocessing'라는 모듈은 def func1이 완료되지 않았다고 하더라도 무시하고 동시에 func2,3 을 실행시키는 개념인가요/ 단계별로 시작이 되는 것인지 동시에 진행되는 것인지 궁금합니다. 알 수 없는 사용자 2017.6.5 11:26
    • 추가 질문을 자꾸 드려서 죄송합니다. 그리고 multiprocessing을 통해서 p1.start()를 실행했을 경우 'Your program is still running! Do you want to kill it? 경고창이 뜨고 실행이 안되는데 왜 그런거죠 ㅠㅠ 알 수 없는 사용자 2017.6.5 11:33
  • 한 프로세스는 한번에 하나의 명령어만 수행할 수 있다고 생각하시면됩니다. 예를 들어

    func1()
    func2()
    

    어떤 프로세스가 이 스크립트를 실행하면 func1이 끝나고 난 뒤에 func2가 실행되겠죠.

    multiprocessing은 프로세스를 여러개 만드는거라고 생각하시면 됩니다. 답변에는 총 4개의 프로세스가 돌아갑니다.

    1. func1을 수행하는 프로세스1
    2. func2를 수행하는 프로세스2
    3. func3을 수행하는 프로세스3
    4. 프로세스1~3을 생성하고, start하고, join하는 프로세스 4

    사람으로 생각하자면 만약 오늘만같아라님이 설거지/방청소/빨래를 해야할 때, 오늘만 같아라님이 직접 설거지, 방청소, 장보기를 하는게아니라

    설거지하는 사람을 만들고 방청소하는 사람을 만들고 장을 보는 사람을 만들고

    그들이 일을 끝내길 기다리는거죠.

    • Your program is still running! Do you want to kill it? 메세지는 직접 코드를 봐야 알 것 같습니다.. 제 환경에서는 잘 돌아가서요
    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 문의 사항이 있어 글을 남깁니다.

    리턴값이 있는 함수의 경우 해당 리턴 값을 변수에 저장하여 사용하고 싶을 때 어떻게 하면 될까요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)