ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python: 클래스, 멀티스레딩, 멀티프로세싱(Class, Multi threading, Multi Processing) 참고
    Python 2021. 4. 3. 00:45

     

    < 파이썬 클래스의 다양한 속성 정리 >

     

     

     

    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이 달립니다.~
    
    반응형

    댓글

Designed by Tistory.