본문 바로가기
반응형

전체 글854

원신 - 범용성 좋은 5성 한손검 with 안개를 가르는 회광 안개를 가르는 회광는 5성으로써 아무나 사용해도 괜찮은 무기하고 할 수 있다. 따라서 픽업 리스트에 안개를 가르는 회광이 등장한다면, 한번쯤은 시도해 봐도 좋을 것 같다. 기초 공격력 674.33 치명타 피해 44.1% 모든 원소의 피해 보너스를 12/15/18/21/24% 획득하고 「무절(霧切)의 문장」을 획득한다. 무절의 문장: 1/2/3스택의 무절의 문장 보유 시, 각각 8/16/28%, 10/20/35%, 12/24/42%, 14/28/49%, 16/32/56%에 해당하는 자신의 원소 타입의 원소 피해 보너스를 획득한다. 캐릭터가 무절의 문장 1스택을 획득할 수 있는 상황: 일반 공격으로 원소 피해를 가하면 5초간 지속. 원소폭발을 발동하면 10초간 지속. 이 외에 캐릭터의 원소 에너지가 100%.. 2024. 3. 25.
Django 4.x 주요 기능 정리(4.0, 4.1, 4.2) Django 버전이 3.2 에서 4.x으로 올린지 거희 1년이 다되어 가고 있다. 곧 4.2가 나오면 LTS로 변경되므로 (Django의 경우 각 메이저 버전에서 x.2가 LTS 버전이다) 현재 3.x버전을 사용하고 있는 입장에서 4.x버전이 어떤 부분들이 좋아졌는지 중요한 부분들을 요약해 본다. 1. 타임존 관련된 기본 라이브러리 zoneinfo 사용 기존 Django의 기본 Timezone 라이브러리는 pytz 였다. 이를 Python 기본 라이브러리인 zoneinfo로 변경되었다고 한다. 이로써 zoneinfo의 다양한 기능을 기본적으로 사용할 수 있게되었다. pytz 은 Django 4.x까지는 같이 쓰이다가 5.0 부터는 제거된다고 하니 zoneinfo에 대해 의존성이 있는지 확인해보는게 좋갰다.. 2024. 3. 25.
Python - argument after * must be an iterable, not int Python에서 Thread를 활용할 경우 인자가 하나인데 INT로 값을 던져줄때 발생하는 문제이다. 원인은 인자를 리스트 형태로 건내줘야 하는데, 값이 하나인 경우 int를 받아주지 못해서 발생한다. 해결 할 수 있는 방법은 두가지로 리스트로 만들거나, 콤마를 마지막에 추가해주는것이다. 아래 다음과 같은 예제코드에서 수정하는 방법은 다음과 같다. from threading import Thread import time def thread_task(number): print('thread start', number) for x in range(1, 10): Thread(target = thread_task, args = (x,)).start() 콤마를 추가 Thread(target = thread_tas.. 2024. 3. 25.
Python - 코루틴과 이벤트루프 이해 정리 코루틴이란!? 코루틴은 특정 함수의 루프등을 실행하다가 일시 정지하고 재개할 수 있는 구성 요소를 말한다. 쉽게 말해 필요에 따라 일시 정지할 수 있는 함수를 의미한다,. 코루틴을 사용하여 네트워크/디스크등 I/O 처리를 위해 대기하고 있을때, 이는 단순히 대기하는 작업을 기다리는 동안 다른 작업을 먼저 처리함으로써 CPU의 유휴 시간(Idle time)을 최소화 할 수 있기 때문 하나의 스레드안에서 최고의 효율을 끌어 낼 수 있다. 특히 파이썬은 GIL때문에 스레드하나를 동작할 때 효율을 극대화 할 수있게 된다. 코루틴을 얘기하면 이벤트루프(EventLoop)라는 용어가 함께 등장한다. 코루틴을 실제 관리하는 개념이 이벤트루프이다. 이벤트루프, EventLoop란? 이벤트루프는 코루틴을 하나의 테스크(.. 2024. 3. 25.
Python - 멀티 쓰레드(thread) 이해 멀티 쓰레드는 GIL로 인해 자원 손실이 존재하지만 기본적으로 I/O 대기 시간을 이용해서 실행하는 구조라고 할 수 있다. Thread를 활용할 수 있는 방법은 threading 라이브러리를 이용할 수 있으며, 가장 기본적인 방법은 다음과 같다. from threading import Thread import time def thread_task(number): print('thread start', number) time.sleep(int(number)) print('thread end', number) start = time.time() for x in range(1, 10): thread = Thread(target = thread_task, args = [x]) thread.start() end .. 2024. 3. 25.
SQLAlchemy - QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30.00 최근 작업요청이 많아지는 것 같더니, 다량의 호출로 인해 Database 접근 오류가 발생하였다. 오류내용은 다음과 같다. QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30.00 (Background on this error at: https://sqlalche.me/e/14/3o7r) Error Messages — SQLAlchemy 1.4 Documentation Previous: Third Party Integration Issues Next: Changes and Migration Up: Home On this page: Error Messages Connections and Transactions DBA.. 2024. 3. 25.
Python - GIL, 멀티 쓰레드(thread) vs 멀티 프로세스(multiprocessing, subprocess) Python 코드를 작성하다보면 시스템 I/O를 효과적으로 사용하는 병령 처리 프로세스를 고민하게된다. 병렬 처리란, 특정 Task를 동시에 실행함으로써 순차적으로 처리하는 기본 처리 프로세스 보다 이점을 가져갈 수 있다. 특히 HTTP와 같은 네트워크 요청이나 Disk등 시스템 자원을 사용하는 I/O 가 발생하는 경우 자원 I/O를 기다리지 않고 다른 Task로 실행할 수 있어 보다 효과적으로 프로세스를 처리할 수 있다. 그렇다면 Python에는 어떤 방식으로 병렬처리를 진행해볼 수 있을까? 필자가 생각하는 방안은 총 2가지 정도이다. 멀티 쓰레드(thread)를 사용하는 방법과 멀티 프로세스(process)를 사용하는 방법이다. 다만 이 멀티 쓰레드(thread)와 멀티 프로세스(process)를 시.. 2024. 3. 25.
Python - *args와 **kwargs 이해 파이썬은 참 편리한 언어이다. 여러가지 내부적으로 처리해주는 기능들이 있으면서도, 이러한 부분들이 개발자들이 사용하는데 크게 이질감이 있지 않다. 이렇게 개발자의 편의를 지원해주는 기능들을 매직 메소드라는 것이 있고, 그중에 *args와 **kwargs 역시 이러한 매직 메소드로 지원되는 기능인데 어떻게 활용 할 수 있는지에 대해서 간략히 정리해 본다. *args와 **kwargs 는 보다 쉽게 아스키로 표현된다고 할 수 있다. * 아스키 기호 하나: 값를 의미 ** 아스키 기호 두개: 사용하면 키가 있는 인자값을 의미 이 매직 메소드를 사용하기 유용한 곳은 어떠한 변수 값을 받을지 알 수 없는 경우에 여기에 값이 있는지를 확인해서 처리할 수 있기 때문에 유용하게 사용할 수 있다. *args(Arguem.. 2024. 3. 25.
Python - JSON 데이터 검색 및 불러오기(dumps, loads, items) >>> load_json_data.keys() >>> for json_key in load_json_data.keys(): ... print(load_json_data[json_key]) ... ('a', 'atest') ('b', ['{"b":"btest"}']) 최근에는 API간 통신을 JSON 형태로 진행하는 경우가 많은데, Python은 JSON 친화적인 언어라고 할 수 있다. Python에서 JSON을 어떻게 다루는지 간단히 알아보자. JSON 만들기(dumps) JSON 데이터를 생성하는 방법은 다음과 같이 중괄호를 이용하여 키를 지정하여 Value를 넣어주면 된다. >>> json_data = {} >>> json_data['a'] = 'atest' >>> json_data {'a': 'at.. 2024. 3. 25.
반응형