-
< 파이썬 클래스의 다양한 속성 정리 >
class Line: def __init__(self, length): self.length = length def __del__(self): print("{}길이의 선 삭제".format(self.length)) def __repr__(self): return str(self.length) def __add__(self, other): return self.length + other.length def __lt__(self, other): return self.length < other.length def __eq__(self, other): return self.length == other.length def __getattr__(self, item): print("잘못된 참조") a = Line(10) b = Line(20) print("a의 길이는 {}".format(a)) print("b의 길이는 {}".format(b)) print(a+b) print(a<b) print(a==b) a.abcd del(a) del(b)
a의 길이는 10 b의 길이는 20 30 True False 잘못된 참조 10길이의 선 삭제 20길이의 선 삭제
< 멀티 스레드(Multi thread) >
프로그램 하나에서 여러개를 동시에 처리할 수 있는 기능 제공
다음과 같이 스레드를 적용하지 프로그래밍이 있다.
import time class RacingCar: def __init__(self, name): self.name = name def run(self): for _ in range(3): print(self.name + "이 달립니다.~") time.sleep(0.1) a = RacingCar("자동차1") b = RacingCar("자동차2") c = RacingCar("자동차3") a.run() b.run() c.run()
자동차1이 달립니다.~ 자동차1이 달립니다.~ 자동차2이 달립니다.~ 자동차2이 달립니다.~ 자동차2이 달립니다.~ 자동차3이 달립니다.~ 자동차3이 달립니다.~ 자동차3이 달립니다.~
a.run이 끝난후, b.run c.run이 실행
이번에는 위 프로그래밍에 스레딩을 적용
import threading th1 = threading.Thread(target=a.run) th2 = threading.Thread(target=b.run) th3 = threading.Thread(target=c.run) th1.start() th2.start() th3.start()
자동차1이 달립니다.~ 자동차2이 달립니다.~ 자동차3이 달립니다.~ 자동차1이 달립니다.~ 자동차2이 달립니다.~ 자동차3이 달립니다.~ 자동차1이 달립니다.~ 자동차2이 달립니다.~ 자동차3이 달립니다.~
a.run()이 끝나기전에 b.run(), c.run()이 실행되었음을 알 수 있다.
즉 동시에 실행중이다.
< 멀티 프로세싱(Multi processing) >
멀티 프로세싱은 복잡하고 시간이 오래 걸리는 작업을 병렬처리하여 단시간안에 끝낼 수 있다.
import multiprocessing if __name__ == "__main__": mp1 = multiprocessing.Process(target=a.run) mp2 = multiprocessing.Process(target=b.run) mp3 = multiprocessing.Process(target=c.run) mp1.start() mp2.start() mp3.start() mp1.join() mp2.join() mp3.join()
join을 이용해야 프로세스가 좀비 프로세스가 되지 않고 끝맺음을 낼 수 있다.
자동차1이 달립니다.~ 자동차2이 달립니다.~ 자동차3이 달립니다.~ 자동차1이 달립니다.~ 자동차2이 달립니다.~ 자동차3이 달립니다.~ 자동차1이 달립니다.~ 자동차2이 달립니다.~ 자동차3이 달립니다.~ Process finished with exit code 0
또한 join은 프로세스가 끝날때까지 기다린 후, 다음 프로세스를 실행시킨다
mp1.start() mp1.join() mp2.start() mp1.join() mp2.join() mp3.start() mp3.join()
자동차1이 달립니다.~ 자동차1이 달립니다.~ 자동차1이 달립니다.~ 자동차2이 달립니다.~ 자동차2이 달립니다.~ 자동차2이 달립니다.~ 자동차3이 달립니다.~ 자동차3이 달립니다.~ 자동차3이 달립니다.~
반응형'Python' 카테고리의 다른 글
Python: Window programming Tkinter 라이브러리 정리 2 (0) 2021.04.16 Python: Window programming Tkinter 라이브러리 정리 1 (0) 2021.04.09 Python: 파일 입출력(이진 파일, shutil, os, os.path) 예외처리 참고 (0) 2021.03.27 Python: 파일 입출력 (읽기, 쓰기, 복사, 암호화 및 복호화) 참고 (0) 2021.03.19 Python: 리스트, 문자열, 제어문, 튜플, 딕셔너리 참고 (0) 2021.03.12