"프로그래밍 언어의 개념과 흐름에 대한 고찰 - 파이썬답게 코딩하기" 학습중...


동시성과 관련한 thread 기법에 대해 어렴풋이 알거나 몰랐던 내용들 몇가지 정리해봅니다.



# import threading
# def worker(count) :
# print("name : %s, argument : %s" % (threading.currentThread().getName(), count))
# def main() :
# for i in range(10) :
# t = threading.Thread(target = worker, name = "thread %i" %i, args = (i,))
# t.start()
# if __name__ == "__main__" :
# main()
#
# name : thread 0, argument : 0
# name : thread 1, argument : 1
# name : thread 2, argument : 2
# name : thread 3, argument : 3
# name : thread 4, argument : 4
## 책에서는 실행할 때마다 실행 순서가 달라지지만 실제 코딩해보니 실행순서는 순서대로 진행됨. 결국 코어가 1개면 스레드를 실행하
## 더라도 순차적으로 실행되지만 CPU가 여러개이면 비순차적으로 실행될 수 있다.




# import threading
#
# class Worker(threading.Thread) :
# def __init__(self, args, name = ""):
# threading.Thread.__init__(self)
# self.args = args
# def run(self):
# print("name : %s, argument : %s" % (threading.currentThread().getName(), self.args[0]))
#
# def main() :
# for i in range(5) :
# t = Worker(name = "thread %i" %i, args = (i,))
# t.start()
#
# if __name__ == "__main__" :
# main()
# name : Thread-1, argument : 0
# name : Thread-2, argument : 1
# name : Thread-3, argument : 2
# name : Thread-4, argument : 3
# name : Thread-5, argument : 4
## 클래스로도 스레드를 구현할 수 있다.




# import threading
# import logging
#
# logging.basicConfig(level = logging.DEBUG, format = "name : %(threadName)s, argument : %(message)s")
#
# def worker(count) :
# logging.debug(count)
#
# def main() :
# for i in range(5) :
# t = threading.Thread(target = worker, name = "thread %i" %i, args = (i,))
# t.start()
#
# if __name__ == "__main__" :
# main()
# name : thread 0, argument : 0
# name : thread 1, argument : 1
# name : thread 2, argument : 2
# name : thread 3, argument : 3
# name : thread 4, argument : 4
## 로깅 함수로 print 동작을 대체함. python2에서는 thread 구현시 print로 출력시 불필요한 공백이 함께 출력되는 등 구현상의 문제가
## 있어서 logging 사용이 필요했음.




# import time
# import threading
# import logging
#
# logging.basicConfig(level = logging.DEBUG, format = "(%(threadName)s) %(message)s")
#
# def demon() :
# logging.debug("start")
# time.sleep(5)
# logging.debug("exit")
#
# def main() :
# t = threading.Thread(name = "demon", target = demon)
# t.setDaemon(True)
# t.start()
#
# if __name__ =="__main__" :
# main()
# (demon) start
## daemon실행의 이점은 프로그램 종료시 스레도도 같이 종료되도록 함. 그렇지 않을 경우 메인 프로그램 종료시 스레드의 종료를 기다림.
## start만 실행하고 메인 프로그램 종료시 같이 종료되어 exit가 출력되지 않음




# import time
# import threading
# import logging
#
# logging.basicConfig(level = logging.DEBUG, format = "(%(threadName)s) %(message)s")
#
# def demon() :
# logging.debug("start")
# time.sleep(5)
# logging.debug("exit")
#
# def main() :
# t = threading.Thread(name = "demon", target = demon)
# t.setDaemon(True)
# t.start()
# t.join()
#
# if __name__ =="__main__" :
# main()
#
# (demon) start
# (demon) exit
## t.join()을 추가함으로써 exit출력됨. 곧 데몬 스레드 종료될 때까지 기다리는 동작을 함.



'파이썬(PYTHON)' 카테고리의 다른 글

파이썬의 스레드(thread)3  (0) 2020.08.27
파이썬의 스레드(thread)2  (0) 2020.08.25
파이썬의 기본 문법3  (0) 2020.08.23
파이썬의 기본 문법2  (0) 2020.08.23
통계 - 주택 청약 통장 계좌수  (0) 2020.08.22

+ Recent posts