본문 바로가기

728x90
반응형

Python

(100)
Python: threading.Lock VS threading.RLock 병렬 처리를 위한 threading 사용시, DB 접근이 필요한 로직이 있을 경우,데이터 무결성 등을 위해 DB 접근이 동시에 되는 것을 막도록 Lock을 걸어야 한다. 근데 이때, Lock을 건 동일한 프로세스에서 Lock을 풀기 전에 다시 DB에 접근해야 하는 경우가 있다.(이러지 않는게 좋겠지만, 비동기 처리를 고려하지 않은 코드를 비동기 코드로 바꾸면서, 한 프로세스에서 여러 차례의 DB 접근이 있을 때 Lock, Release, Lock, Relase를 일일히 하지 않고 처리하고 싶을 때 등) 이를 가능하게 하는 것이 RLock이다, (Reentrant Lock: 재입장 가능한 잠금)일반 Lock은 Lock을 걸었냐 안 걸었냐를 통해서만 접근을 막는다면RLock은 누가 Lock을 걸었는지,그..
Python: StateMachine 콜백 함수 # state에 따른 콜백 # transition에 따른 콜백 python-statemachine 에서 콜백 함수의 동작 순서 정리 from statemachine import StateMachineclass TestSM(StateMachine): # 상태 정의 idle = State("Idle", initial=True) error = State("Error") # 상태 전의 정의 start_error_init = idle.to(error) def on_enter_error(self): print("idle to error") def on_exit_idle(self): print("exited from idle") def on_start_error_init(self): print..
Python: pyragify와 NotebookLM을 활용한 프로젝트 분석 목적: 처음 접하는 programming repository에 대한 빠른 분석 Tool 들의 사용 이유: - NotebookLM : 자료 정리 및 질문에 대한 AI - pyragify : 프로젝트를 NotebookLM에서 분석이 가능하도록 하나의 .txt 파일 도출 추가설명 - .py 등의 파일 포맷이 NotebookLM에 사용이 불가능 -> 프로젝트 코드들을 하나의 .txt 파일로 변환 사용 예제 1. pyragify를 사용한 코드 추출 .txt 생성 * 출처: pypi - https://pypi.org/project/pyragify/ 1) 설..
Python Crawling: Selenium driver error # --user-data-dir # --headless # selenium.common.exceptions.SessionNotCreatedException: Message: session not created: probably user data directory is already in use, please specify a unique value for --user-data-dir Python의 Selenium 라이브러리를 통해 크롤링을 진행하던 중 아래의 에러를 만났다. selenium.common.exceptions.SessionNotCreatedException: Message: session not created: probably user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir 로컬에서는 이상없이 동작하던 스크립트가 remote 서버에서는 위와 같은 에러를 마주했다.위 에러를 검색하면 stackoverflow나 AI(ChatGPT, Claude 등)는 다음과 같은 해결책을 제시해준다.import ..
Python: script내의 argument(인자) 받는 함수 실행하기 # python -m script_path method args 예제 코드 if __name__ == "__main__": import sys with Database() as db: if len(sys.argv) > 1: method_name = sys.argv[1] method = getattr(db, method_name, None) args = sys.argv[2:] # Get additional arguments if method is not None and callable(method): method(*args) # Pass the arguments to the method el..
Python: script 실행시 상위 경로 인식 못하는 문제 # -m option - a.py- b_dir  - b.py 위와 같은 파일 구조로 되어있고, b.py에서 a.py에 있는 a_url을 import 해서 쓰는 경우 # b.pyfrom a import a_url 위와 같은 상황에서 VS code의 'Run Python File' 버튼을 누르거나, python b.py 명령어로 실행시키면,No module named 'a' 라는 오류가 나온다.또는 상위 경로에서python a.b 명령어를 실행하면can't open file ... [Errno 2] No such file or directory 오류가 발생한다. 이런 경우에는 a.py가 있는 경로에서 -m 옵션을 주고 실행하면 된다.python -m a.b
Pydantic: Settings with BaseSettings # .env Pydantinc에서 제공하는 pydantic_settings.BaseSettings를 통해서, 환경설정 값들을 정할 수 있는데..env 파일이 없거나,개발환경에서만 쓰이거나 개인 프로젝트에서만 쓰이는 .env 파일 안에 있지 않은, 개별적인 설정 값들을 사용할 때 유용하게 쓸 수 있다. 설치: pip install pydantic-settings  아래와 같이 settings.py와 .env 파일이 있다고 하자.# settings.pyfrom pydantic_settings import BaseSettingsclass Settings(BaseSettings): ATTR_1 = "a" ATTR_2 = "b" # .envATTR_1 = "C" 프로그램 실행시 Settings의 ATTR_1 값은 ..
Python: name mangling 된 메소드 오버라이딩 # __method # Python 클래스에서 언더바 두개가 붙는 메소드는 private하게 취급이 된다. class Base: ... def __test_method(self) 와 같이 선언된 __test_method의 경우, 메소드 명이 변경되는 name mangling이 일어난다.name mangling이 되면 __test_method로 선언한 명칭이 변경이되기 때문에,Base를 상속받은 다른 클래스에서 __test_method라고 메소드 선언을 해도 오버라이딩이 일어나지 않는다. 이와 같이, 다른 곳에서 쉽게 오버라이드 되지 않도록 일종의 예방 차원에서 __ 형태를 쓸 수 있다. 그렇지만 외부라이브러리 등을 사용하는 경우에 name mangling된 메소드를 오버라이드 할 상황이 생긴다.(예를 들어 특정 wa..

728x90
반응형