Programming Language/Python 14

[Python] Private PyPI Server 세팅 및 upload and install packages

TL;DR Private PyPI Server 세팅 후 package 업로드 및 설치 사용방법에 대해서 정리해보는 글입니다. 아래의 모든 실습에 해당하는 코드는 https://github.com/Gracechung-sw/python-namespace-package-sample 에 있으며 README를 참고하실 수 있습니다. 가장 많은 도움이 된 자료는 https://testdriven.io/blog/private-pypi/ 입니다. Background 크고 복잡하며 확장성을 고려한 소프트웨어는 여러 모듈로 분리 될 수 있고, 각각 ownership을 가지고 주도적으로 개발하는 개발자가 다를 수 있다. Use Case를 생각해보면(use case라고 적고, 내가 현업에서 하고 있는 일이라고 읽는다 ㅎㅎ) ..

[High Performance] Profiling & Numpy for Matrix and Vector Computation

올해 초에 딥러닝 분석을 돌리는데 필요한 많은 연산에서 어느 부분에 병목이 발생하는지 프로파일링 해보고, 해결하는 과정을 진행했다. 시간 복잡도가 O(|V|^3)인 floyd_warshall 알고리즘을 사용하고 있었기 때문에 여기서 시간이 오래 걸리는게 아닐까 예상하였지만 프로파일링 결과를 보니 행렬과 벡터 연산을 순수 파이썬 리스트로 구현한 곳에서 속도가 늦어지고 있다는 것을 알게 되었다. 그래서 이를 numpy를 사용한 행렬과 벡터 연산으로 수정하였고, 그 결과 시간을 약 86% ~ 97% 정도로 줄일 수 있었다. 책을 참고 하였으며, 이 과정에서 배운 '프로파일링으로 병목 지점 찾기'와 '행렬과 벡터 산술 계산에서 numpy가 순수 파이썬보다 빠른 이유'를 중점으로 정리하고자 한다. 1. 프로파일링..

[Python] 동시성과 병렬성 문법 - Multiprocess

1. join 과 is_alive을 이용한 process 실행 큰 틀 한 프로세스만 생성하여 실행해보기 위한 큰 틀은 아래와 같다. join 메소드는 파이썬에게 프로세스가 종료 될 때까지 대기하도록 지시하고, is_alive는 process가 실행되고 있는지 여부를 반환한다. join([timeout]) If the optional argument timeout is None (the default), the method blocks until the process whose join() method is called terminates. If timeout is a positive number, it blocks at most timeout seconds. Note that the method retu..

[Python] 동시성과 병렬성 문법 - GIL과 Multithreading

1. 멀티 스레드, 멀티 프로세스 개념 [운영체제] Thread 에서 정리한 적이 있음. a. Processs vs Thread Process: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램, 즉 메모리에 올라와 실행되고 있는 독립적인 프로그램 인스턴스 Thread: 프로세스 내에서 동작되는 여러 실행의 흐름 단위 이렇게 하나의 프로세스 내에서 생성된 thread끼리 해당 프로세스의 영역을 공유한다. - Processs는 독립적, Thread는 프로세스의 서브넷 - Process는 각각 독립적인 자원을 가진다. Thread는 프로세스의 자원을 공유한다. Process는 별도의 Code, Data, Stack, Heap을 독립적으로 가지는 반면 Thread는 Stack만 독립적으로 가지고 Code, ..

[Python Clean Code] 1. 코드 포매팅과 도구

※ 본 포스트는 마리아노 아냐야의 을 참고하여 작성하였습니다. 1. 클린 코드의 의미 프로그래밍 언어의 진정한 의미는 아이디어를 다른 개발자에게 제공하는데 있다. 그러므로 클린코드인지 아닌지는 다른 엔지니어가 코드를 읽고 유지 관리할 수 있는지 여부에 달려 있다. 그래서 이 학습의 목표는 '파이썬의 주요 개념을 이해하고, 훌륭한 코드와 좋은아키텍쳐의 특징을 식별하여 나(팀)만의 파이썬 클린 코드의 정의를 하는 것' 이다. 2. 코드 포메팅 PEP란 Python Enhancemennt Proposal의 약자로 파이썬 개선을 위한 제안서를 의미한다. 각 제안서는 곡유한 번호르 ㄹ갖게 되는데 PEP 8번 Style Guid for Python Code에서 코딩 컨벤션에 대한 내용을 다룬다. 클린 코드는 단순히..

Python Algorithm) Queue을 이용한 알고리즘 문제

1) 공주 구하기 정보 왕국의 이웃 나라 외동딸 공주가 숲속의 괴물에게 잡혀갔습니다. 정보 왕국에는 왕자가 N명이 있는데 서로 공주를 구하러 가겠다고 합니다. 정보왕국의 왕은 다음과 같은 방법으로 공주를 구하러 갈 왕자를 결정하기로 했습니다. 왕은 왕자들을 나이 순으로 1번부터 N번까지 차례로 번호를 매긴다. 그리고 1번 왕자부터 N 번 왕자까지 순서대로 시계 방향으로 돌아가며 동그랗게 앉게 한다. 그리고 1번 왕자부터 시계방향으로 돌아가며 1부터 시작하여 번호를 외치게 한다. 한 왕자가 K(특정숫자)를 외치면 그 왕자는 공주를 구하러 가는데서 제외되고 원 밖으로 나오게 된다. 그리고 다음 왕자부터 다시 1부터 시작하여 번호를 외친다. 이렇게 해서 마지막까지 남은 왕자가 공주를 구하러 갈 수 있다. 예를..

Python Algorithm) Stack을 이용한 알고리즘 문제

1) 가장 큰 수 선생님은 현수에게 숫자 하나를 주고, 해당 숫자의 자릿수들 중 m개의 숫자를 제거하 여 가장 큰 수를 만들라고 했습니다. 여러분이 현수를 도와주세요.(단 숫자의 순서는 유지해야 합니다) 만약 5276823 이 주어지고 3개의 자릿수를 제거한다면 7823이 가장 큰 숫자가 됩니다. ▣ 입력설명 첫째 줄에 숫자(길이는 1000을 넘지 않습니다)와 제가해야할 자릿수의 개수가 주어집니다. ▣ 출력설명 가장 큰 수를 출력합니다. ▣ 입력예제 1 5276823 3 ▣ 출력예제 1 7823 코드) 더보기 num, m = map(int, input().split()) num = list(map(int, str(num))) #각 자리수에 있는 숫자 하나하나에 접근 할 수 있기 때문 # print(num..

python - class/ 상속/ magic method

Class 1. 객체지향이란 : 설계도(Class) 작성 -> 실제 물건(객체; Object) '사용자 정의 데이터 타입'이라고도 한다. 사용 이유: 여러명의 개발자가 코드를 효율적으로 작성해서 프로젝트를 완성시키기 위한 방법 2. Class란 : 변수와 함수를 묶어놓은 개념이라고 간단하게 생각 Class의 사용 방법: - 변수와 함수가 들어있는 Class를 선언 - Class를 객체로 만들어서 Class안에 선언된 변수와 함수를 사용한다. - 변수와 함수가 들어있는 Class를 선언 - Class를 객체로 만들어서 Class안에 선언된 변수와 함수를 사용한다. #1. Class의 선언 - 계산기 class class Calculator: #변수 작성 num1 = 1 num2 = 2 #함수 작성 def ..

Python Algorithm) 3. k번째 큰 수

3. k 번째 큰 수 현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려 고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력 하는 프로그램을 작성하세요. 만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값 은 22입니다. ▣ 입력설명 첫 줄에 자연수 N(3