이 영역을 누르면 첫 페이지로 이동
#include < ResetDy.com > 블로그의 첫 페이지로 이동

#include < ResetDy.com >

페이지 맨 위로 올라가기

#include < ResetDy.com >

[Python] Thread 테스트

  • 2018.03.20 15:15
  • Programming/Python
반응형




파이썬을 공부하기 시작했습니다~!


Thread 쪽을 보는 도중에 뭔가 이상함(?)을 느끼고 테스트를 해봤습니다.


이상한 느낌이라는게.. 


쓰레드를 두개로 했을때 기존보다 못해도 40% 정도는 속도면에서 이득이 있어야 하는데..


별반 다른점이 없다는점 이였습니다.



그래서~!! 테스트를 진행해봤습니다.


아주 간단한 덧셈 프로그램 인데요!


StartValue 부터 EndValue 까지 더하는 프로그램 입니다!

from threading import Thread

def do_sum(_start, _end, _result):
temp = 0
for i in range(_start, _end):
temp += i
result.append(temp)
return


StartValue = 0
EndValue = 100000000
result = list()

th1 = Thread(target=do_sum, args=(StartValue, EndValue, result))
th1.start()
th1.join()

print("Sum Result : ", sum(result))

위 프로그램을 쓰레드 1개만 사용했을 때 측정된 시간 입니다.






그리고 위의 프로그램을 쓰레드 2개로 반 씩 나누어 더해줬을 때 입니다.



from threading import Thread

def do_sum(_start, _end, _result):
temp = 0
for i in range(_start, _end):
temp += i
result.append(temp)
return


StartValue = 0
EndValue = 100000000
result = list()

th1 = Thread(target=do_sum, args=(StartValue, int(EndValue/2), result))
th2 = Thread(target=do_sum, args=(int(EndValue/2), EndValue, result))
th1.start()
th2.start()
th1.join()
th2.join()

print("Sum Result : ", sum(result))




올라..?? ....


쓰레드 1개를 사용했을 때 : 5.475s

쓰레드 2개를 사용했을 때 : 5.591s


속도가 빨라지긴 커녕 증가를 해버리네요..



원하던건 더 빨라진 속도였는데.. 쓰레드가 도움이 안되다니.. ㅠㅠ


그럼 파이썬은 쓰레드가 불가능하냐!?



그렇진 않습니다~! 


파이썬에서 다중작업을 수행하려면 프로세서 개념을 사용해야 합니다.


즉, 쓰레드를 2개로 사용하는 것이 아닌 프로세서를 2개로 사용하는 개념 입니다.


from multiprocessing import Process, Queue

def do_sum(_start, _end, _result):
temp = 0
for i in range(_start, _end):
temp += i
result.put(temp)
return


StartValue = 0
EndValue = 100000000
result = Queue()

pr1 = Process(target=do_sum, args=(StartValue, int(EndValue/2), result))
pr2 = Process(target=do_sum, args=(int(EndValue/2), EndValue, result))
pr1.start()
pr2.start()
pr1.join()
pr2.join()

result.put('STOP')
temp = 0
while True:
rtnVal = result.get()
if rtnVal == 'STOP' :
break
else :
temp += rtnVal

print("Sum Result : ", temp)


사용 방법은 기존 threading 모듈을 multiprocessing 모듈로 교체해주고


Thread() 함수 대신 Process() 함수로 교체하여 사용하는 것 입니다.



그래서!? 결과는 어떤데!?



CPU 사용수치가 약 190%로 상승하고 시간은 2.867s 가 소요되었습니다!


반까진 아니지만 약 48% 정도 속도가 빨라진 것이 확인이 되네요~!




그렇다면.. 프로세서를 4개 돌리면 어떻게 될까요?? 


from multiprocessing import Process, Queue

def do_sum(_start, _end, _result):
temp = 0
for i in range(_start, _end):
temp += i
result.put(temp)
return


StartValue = 0
EndValue = 100000000
End1 = int(EndValue / 4)
End2 = int((EndValue / 4) * 2)
End3 = int((EndValue / 4) * 3)
End4 = int(EndValue)

result = Queue()

pr1 = Process(target=do_sum, args=(StartValue, End1, result))
pr2 = Process(target=do_sum, args=(End1, End2, result))
pr3 = Process(target=do_sum, args=(End2, End3, result))
pr4 = Process(target=do_sum, args=(End3, End4, result))

pr1.start()
pr2.start()
pr3.start()
pr4.start()

pr1.join()
pr2.join()
pr3.join()
pr4.join()

result.put('STOP')
temp = 0
while True:
rtnVal = result.get()
if rtnVal == 'STOP' :
break
else :
temp += rtnVal

print("Sum Result : ", temp)



1.5s 가 걸리네요~! 2 프로세서보다 약 48% 정도 속도가 빨라 졌습니다!



정리를 해볼까요~


쓰레드1 : 5.475 s

쓰레드2 : 5.595 s

프로세서2 : 2.867 s

프로세서4 : 1.500 s


처리속도가 걸렸습니다~


아래 동영상을 촬영했는데 촬영된 내용에는 쓰레드2가 쓰레드1 보다 처리 속도가 조금 더 빨리 나왔네요.


쓰레드1 만 계속 실행해보면 시간이 항상 일치하는 것은 아닙니다~


참고하세요^^



 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Programming > Python' 카테고리의 다른 글

[Python] Qt designer으로 만들어진 ui 파일 파이썬에서 로드시키기  (0) 2018.03.30
[Python] 키움증권 OpenAPI 종목 기본정보 요청하기  (0) 2018.03.30
[Python] 키움증권 OpenAPI 로그인 이벤트 연결 및 적용  (0) 2018.03.29
[Python] 키움증권 OpenAPI 모듈 사용 시 동작이 안할때!  (0) 2018.03.29
[Python] 데이터 시각화 중 신기했던 로또번호  (0) 2018.03.26
[Python] 간단한 웹페이지 읽어오기  (0) 2018.03.22
[Python] 파일 오픈시 Encoding 오류 (미결)  (0) 2018.03.21
[Python] List 자료형  (0) 2018.03.20

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Python] 데이터 시각화 중 신기했던 로또번호

    [Python] 데이터 시각화 중 신기했던 로또번호

    2018.03.26
  • [Python] 간단한 웹페이지 읽어오기

    [Python] 간단한 웹페이지 읽어오기

    2018.03.22
  • [Python] 파일 오픈시 Encoding 오류 (미결)

    [Python] 파일 오픈시 Encoding 오류 (미결)

    2018.03.21
  • [Python] List 자료형

    [Python] List 자료형

    2018.03.20
다른 글 더 둘러보기

정보

#include < ResetDy.com > 블로그의 첫 페이지로 이동

#include < ResetDy.com >

  • #include < ResetDy.com >의 첫 페이지로 이동

검색

메뉴

  • Home
  • Tag
  • Guest Book
  • Write
  • Admin

카테고리

  • 분류 전체보기 (129)
    • VR (3)
    • 내 이야기 (37)
    • Trade (13)
      • 주린이 HTS (0)
      • 주린이 일기 (2)
      • 주린이 공부 (0)
      • 주린이 매매일지 (11)
    • Hardware (2)
      • Tip (1)
      • Schematic (1)
    • Programming (24)
      • C++ (1)
      • C# (5)
      • Python (9)
      • Android (9)
    • MicroProcessor (17)
      • AVR (8)
      • STM32 (6)
      • RaspberryPi (1)
      • Smart Car (2)
    • Computer (23)
      • Tip (6)
      • Linux (5)
      • MacOS (11)
    • Car D.I.Y (10)
      • XMAX300 (1)
      • All New Carnival (5)
      • SM3 (4)

공지사항

블로그 구독하기

  • 구독하기
  • RSS 피드

정보

ResetDy의 #include < ResetDy.com >

#include < ResetDy.com >

ResetDy

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © ResetDy. Designed by Fraccino.

티스토리툴바