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개의 프로세스가 돌아갑니다.
- func1을 수행하는 프로세스1
- func2를 수행하는 프로세스2
- func3을 수행하는 프로세스3
- 프로세스1~3을 생성하고, start하고, join하는 프로세스 4
사람으로 생각하자면 만약 오늘만같아라님이 설거지/방청소/빨래를 해야할 때, 오늘만 같아라님이 직접 설거지, 방청소, 장보기를 하는게아니라
설거지하는 사람을 만들고 방청소하는 사람을 만들고 장을 보는 사람을 만들고
그들이 일을 끝내길 기다리는거죠.
Your program is still running! Do you want to kill it?
메세지는 직접 코드를 봐야 알 것 같습니다.. 제 환경에서는 잘 돌아가서요
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력