인프런 커뮤니티 질문&답변

JJun M님의 프로필 이미지

작성한 질문수

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

병행성 - 기본(1-1)

여러개의 함수를 동시에 실행하고 싶습니다.

20.06.02 09:33 작성

·

4.1K

0

여러개의 함수를 동시에 실행하는 방법을 알고 싶습니다.

답변 2

1

좋은사람님의 프로필 이미지
좋은사람
지식공유자

2020. 06. 03. 08:40

안녕하세요. 

데코레이터를 이용하시거나 , 멀티프로세스 등 여러가지 방법이 있습니다.

아래는 멀티프로세스 패키지를 활용한 예시입니다.

from multiprocessing import Process
import sys

rocket = 0

def func1():
    global rocket
    print 'start func1'
    while rocket < sys.maxint:
        rocket += 1
    print 'end func1'

def func2():
    global rocket
    print 'start func2'
    while rocket < sys.maxint:
        rocket += 1
    print 'end func2'

if __name__=='__main__':
    p1 = Process(target = func1)
    p1.start()
    p2 = Process(target = func2)
    p2.start()

0

JJun M님의 프로필 이미지
JJun M
질문자

2020. 06. 03. 10:28

안녕하세요, 좋은사람님

샘플 주신 부분을 제 실무에 도입해 봤는 데 정상적으로 동작하지 않아 추가 문의를 합니다.

jupternote에서 하이브 쿼리를 사용하여 하둡 DB에서 로그를 적재 후 수집을 하려고 합니다.

데이터 수집 함수가 많을 때 순차적으로 실행하면 데이터 수집에 많은 시간이 들것으로 예상합니다.

데이터 수집 함수를 동시에 실행하여 수집 세션을 연결하고 데이터를 수집하려고 합니다.

알려주신 멀티 프로세스를 적용하여 아래와 같이 같이 출력되는 것을 확인했습니다.

저와 같은 상황에서도 멀티 프로세스 방식으로 처리하는 것이 좋은지 아니면 다른 방법이 있는 지 문의합니다.

--참고 코드

 def  데이터 수집 세션 연결 기능():

         #쿼리문을 입력 받아 하이브 세션을 실행

def 데이터수집처리1():

      def querry():

       # 쿼리문

     def loadData():

      #SQL 전처리한 결과를 엑셀 문서에 원하는 형태로 처리 후 정리

     loadData(데이터 수집 세견 연결 기능(querry()))

 def 데이터수집처리2():

      def querry():

       # 쿼리문

     def loadData():

      #SQL 전처리한 결과를 엑셀 문서에 원하는 형태로 처리 후 정리

     loadData(데이터 수집 세견 연결 기능(querry()))

if __name__=='__main__':

    p1 = Process(target = 데이터수집처리1)

    p2 = Process(target = 데이터수집처리2)

    p1.start()

    p2.start()


JJun M님의 프로필 이미지

작성한 질문수

질문하기