파이썬 메모
-
Logger 적극 활용파이썬 메모 2021. 4. 22. 23:58
서버에서 돌리기 위해서는 터미널 출력뿐만 아니라 더 안전하게출력문들을 기록하기 위해 log를 적극 활용하자. 그냥 지금부터 print문은 아주 간단하게 출력하기 위함이고 모든 문장을 log에다 적는 습관을 들이자. class Logger(object): def __init__(self): self.terminal = sys.stdout self.file = None def open(self, file_path, mode=None): if mode is None: mode = "w" self.file = open(file_path, mode) def write(self, message, is_terminal=1, is_file=1): if "\r" in message: is file=0 if is_term..
-
argparse 모르는 것 그때 그때 정리파이썬 메모 2021. 3. 18. 12:35
argparse는 모든 것을 다 알 필요는 없고 남의 코드를 읽을 때나 리눅스처럼 필요하면 그때 그때 찾아서 공부하는 것이 좋다. argument 이름 정의 인자의 이름을 지정 할 때 여러 이름을 짓는 것이 가능하다. 보통 2가지를 하는데, (내 생각엔 항상 2가지하는것 같음) parser.add_argument("--gpu_num" , "-n", help = "gpu number") 이렇게 하면 코드 내에서는 args.gpu_num 이렇게 쓰고, 변수가 길거나 다 쓰기 귀찮다 하면 변수 지정 할 때에는 nohup python asdasd.py -n 3 이런 식으로 사용하면 된다. type 지정 기본적으로 argparse에서는 모든 것을 문자열로 지정해 주기 때문에 만약 코드에서 int 를 사용할 때면 ..
-
multiprocessing in python파이썬 메모 2020. 12. 30. 20:48
파이썬의 multiprocess에는 여러가지 패키지를 사용할 수 있다. 1. import multiprocess 이 패키지는 주피터에서는 사용 할 수 없다. 무조건 파이참같은 곳에서만 해야됨. 먼저 한개의 프로세스를 넣는 방법. 즉, 한개의 프로세스만 코드상에서 멀티 프로세싱 하는 것으로 지정 해 두고, 돌린다. 위와같이 하면 그냥 func1함수를 3을 넣어서 하나의 프로세스를 그냥 돌리는것. 위와같이 하면 아래에 10개의 서로같은 parent를 갖고 다른 pid를 갖는 프로세스가 생긴다. 대신 처리는 한번에 하나씩 한다. 즉, a값은 0,1,...,5로 출력된다. 이렇게 하면 위와 같이 병렬처리이므로 sleep이 있어도 처리속도가 빨라서 동시에 먼저 parent를 출력할 수도 있다. 2. import ..
-
상위 및 하위 폴더에 있을 때 from import파이썬 메모 2020. 11. 11. 00:08
main.py가 메인으로 돌릴 파일이면, 같은 폴더의 다른 파일 asdasd.py에서 os.getcwd()를 출력하라고 하면 당연히 .../main.py가 나온다. 따라서 내가 model.py에서 모델의 경로를 ./save_model/model.pth를 주었을때 실제 이 경로는 main.py를 상대위치로 잡아 main.py와 같은 폴더에 있는 폴더 save_model의 model.pth가 있는지 찾는다. 따라서 model.py가 다른 위치에 있다고 하더라도 이 경우에는 model.py가 위치한 폴더에 save_model을 만드는 것이 아니라는 것을 염두하자. 반면, folder/ folder1/ asdasd.py qweqwe.py folder2/ zxczxc.py 로 있을때, qweqwe.py는 from..
-
super()파이썬 메모 2020. 11. 10. 13:41
super는 별개로 오버라이딩(상속한 클래스의 함수명과 같은 함수명이 존재 할때, 상속한 함수의 함수를 불러오기 위함. 딥러닝 모델에서 주로 쓰는것은 forward, call등 nn.Module에서 존재하는 것을 오버라이딩 할 때 쓰기 위해서 새로 정의할 때 super로 먼저 init을 하고 쓰는것.) super와 super(self.__class__, self) 의 차이점을 예제로 보면 class Rectangle: def __init__(self, length, width): self.length = length self.width = width print("할머니 초기화") def area(self): print("할머니 area") return self.length * self.width clas..
-
@staticmethod, @classmethod, self의 차이파이썬 메모 2020. 11. 10. 13:30
먼저 둘 다 데코레이션을 씀. 정적메소드는 하나의 클래스 안에서 이 정적메소드가 적용된 함수만 독립적으로 활동하게 할 때 쓴다. 즉 외부로 영향을 안 주는 것을 표현할때. 클래스 메소드는 거의 self랑 비슷한데, 상속에서 차이가 존재. 일단 class a에서 변수값이 10이고 class b 가 a를 상속 받을 때, b에서 같은 이름의 변수를 20으로 지정 했을 떄, b에서 함수를 호출하면 20을 적용시킨다. 즉 , @classmethod에서 cls는 말 그대 변수이므로 cls가 정의된 클래스에서 이 클래스만을 지정하는 것이 아니라 상속되었을 땐 당연히 새로 상복받은 클래스에서 새롭게 정의 되는것. 만약 cls가 없다면 그냥 함수에서 정의한 클래스이름으로 써야되는데 그러면 상속 할 때마다 상복받은 함수는..