목록개발/Python (36)
정규 표현 특정한 패턴과 일치하는 문자열을 '검색', '치환', '제거' 하는 기능 지원 정규 표현식의 도움 없이 패턴을 찾는 작업은 불완전 하거나, 작업의 비용이 큼 ex) 이메일 형식 판별, 전화번호 형식 판별, 숫자로만 이루어진 문자열 등 raw string 문자열 앞에 r이 붙으면 해당 문자열이 구성된 그대로 문자열로 변환 보통 정규 표현식은 raw string을 사용 # raw string a = 'abcdef\n' print(a) b = r'abcdef\n' print(b) # abcdef # abcdef\n search 함수 기본 패턴 a, X, 9 등 문자 하나하나의 character 들은 정확히 해당 문자와 일치 몇몇 문자들에 대해서는 예외가 존재, 이들은 특별한 의미로 사용 . ^ $ ..
Python 코루틴 비동기 I/O 코루틴 개념 파일을 쓰거나 읽거나 또는 네트워크의 웹 사이트에 요청하고 응답이 오는 타이밍에 모든 워커들이 멈추는 현상이 발생하므로 바로 제어권을 요청하면 다음 워커가 일하고 또 다음 워커가 일하는 것을 yield를 통해 제어권을 메인 함수에 주고 일을 여러 명이서 동시성을 가지고 할 수 있게 함. 단일 스레드. Block I/O 순차 실행 ThreadPool 사용 우회 Asyncio 순차 실행 # Asyncio # 동기 - 기다림 # 비동기 I/O - 기다리지 않고 바로 실행 # Generator -> 반복적인 객체 Return(yield) # 즉, 실행 Stop -> 다른 작업 위임 -> Stop 지점 부터 재실행 원리 # Non-Blocking 비동기 처리 적합 #..
동시성 개념 비동기 작업 - 여러 개가 동시에 일어남 ThreadPool ProcessPool Block / Non-Block (요청을 할 때 기다리는 것이 아닌 다른 사람이 일을 할 수 있게 함) 개념 Python GIL 고려해서 3가지 방법 중 적절한 방법 고려 # Future 동시성 # 비동기 작업 실행 # 지연 시간(Block) CPU 및 리소스 낭비 방지 -> Network(File) I/O 관련 작업 동시성 활용 권장 # 적합한 작업일 경우 순차 진행보다 압도적으로 성능 향상 # 순차 실행 # concurrent.futures 방법1 # concurrent.futures 방법2 import os # 경로 import time # 성능 측정 import sys import csv # 순차 실행 ..
# yield # Coroutine # yield: 메인 루틴 서브 루틴 간의 통신 가능하게 함 # 코루틴 제어, 코루틴 상태, 양방향 값 전송 # yield from # 서브루틴: 메인루틴에서 -> 리턴에 의해 호출 부분으로 돌아와 다시 프로세스 # 코루틴: 루틴 실행 중 멈춤 가능 -> 특정 위치로 돌아갔다가 다시 원래 위치로 돌아와 수행 가능 # 코루틴: 스케줄링 오버헤드가 매우 적다. 하나의 스레드에서 실행하기 때문 # 스레드 : 싱글스레드 -> 멀티스레드: 복잡, 공유되는 자원에 대한 교착 상태 발생 가능성, 컨텍스트 스위칭 비용 발생, 자원 소비 가능성 증가 # 코루틴 예제1 # 여러 함수를 비동기 수행. 동시성 프로그래밍 가능 from functools import wraps from ins..
파이썬 반복형 종류 Iter, next 함수 Generator 장점 # Generator # 파이썬 반복형 종류 # for, collections, text file, List, Dict, Set, Tuple, unpacking, *args # 공부할 것: 반복형 객체 내부적으로 iter 함수 내용, 제너레이터 동작 원리, yield from # 반복 가능 이유? -> iter(x) 함수 호출 import itertools from collections import abc t = 'ABCDEF' # for for c in t: print(c) print() w = iter(t) while True: try: print(next(w)) except StopIteration as log: pr..
Private 속성 slot 예제 객체 슬라이싱, 인덱싱 ABC, 상속, 오버라이딩 import timeit class VectorP: # 생성할 때는 조건 만들어 놓으면 체크하지만 밖에서 수정하는 경우 체크 못함 def __init__(self, x, y): self.__x = float(x) self.__y = float(y) def __iter__(self): return (i for i in (self.__x, self.__y)) # Generator # Getter / Setter # 주로 함수이름은 변수이름으로 함 # get method @property def x(self): print('Called Property x getter') return self.__x @x.sett..